2011-11-10 3 views
1

이 프로그램을 사용하면 판매를 입력하고 주당 판매 세를 계산할 수 있습니다. 더블 워드 (예 : 뉴저지)를 읽을 때 프로그램에서 오류가 발생합니다. 일부분에는 helo가 필요합니다.문자열 토크 나이저를 사용하여 상태 이름을 읽으려고 할 때 오류가 발생했습니다.

import java.text.DecimalFormat; 
import java.util.*; 
import java.io.*; 
import java.lang.reflect.Array; 
import java.nio.CharBuffer; 
import java.awt.*; 
//import java.awt.event.*; 
import javax.lang.model.type.ArrayType; 
import javax.swing.*; 
import javax.swing.event.*; 
public class PJ5 extends JFrame implements ListSelectionListener 
{String []States = new String[100]; 
    double []statetax = new double[100]; 
double sales; 
JPanel p1; 
JList StateList; 



JTextField salesField; 
private JTextField taxField; 
public static void main(String []args)  
    { 
    PJ5 x = new PJ5(); 
    x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    x.setTitle("Sales tax calculator"); 
    x.setSize(350, 250); 
    x.setVisible(true); 

    } // main 

public PJ5() // constructor 
{ 
String s; 
StringTokenizer st; 
int k=0; 
try 
{ 
BufferedReader inFile = new BufferedReader(new FileReader("C:\\Users\\Owner\\Documents\\taxrates.txt")); 
    while ((s= inFile.readLine()) != null) 
    { 


st = new StringTokenizer(s); 
     States[k]=(st.nextToken()); 

    statetax[k] = Double.valueOf(st.nextToken()); 

    ++k; 
    } // while not EOF 
    inFile.close(); 
} catch (Exception e) { System.err.println(e); } 



JPanel p1 =new JPanel(); 

p1.setLayout(new GridLayout(2,1)); 

p1.add(new JLabel("Sales amount:")); 
salesField= new JTextField(5); 
salesField.setEditable(true); 
p1.add(salesField); 


p1.add(new JLabel("tax:")); 
taxField= new JTextField(4); 
taxField.setEditable(false); 
p1.add(taxField); 


add(p1,BorderLayout.NORTH); 
pack(); 
setVisible(true); 

JPanel p = new JPanel(); 
StateList = new JList(States); // create a JList object 
StateList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
JScrollPane sp = new JScrollPane(StateList); // adding scrolling capability 
p.add(sp); 
getContentPane().add(p, BorderLayout.SOUTH); 
// Event registration 
StateList.addListSelectionListener(this); 
} // constructor 

// Event handling 
public void valueChanged(ListSelectionEvent event) 
    { 
    DecimalFormat dollar = new DecimalFormat("0.00"); 
    double tax; 
    sales=Double.parseDouble(salesField.getText()); 

tax=sales* (statetax[StateList.getSelectedIndex()]/100); 
    taxField.setText("$"+dollar.format(tax)); 

    } // valueChanged 
} 

여기에 주정부 세율이 적용되는 텍스트 파일이 있습니다.

Alabama 4.0 
Alaska 0. 
Arizona 5.6 
Arkansas 6.0 
California 8.25 
Colorado 2.9 
Connecticut 6.0 
Delaware 2.07 
Florida 6.0 
Georgia 4.0 
Hawaii 4.0 
Idaho 6.0 
Illinois 6.25 
Indiana 7.0 
Iowa 6.0 
Kansas 5.3 
Kentucky 6.0 
Louisian, 4.0 
Maine 5.0 
Maryland 6.0 
Massachusetts 6.25 
Michigan 6.0 
Minnesota 6.875 
Mississippi 7.0 
Missouri 4.225 
Montana 0. 
Nebraska 5.5 
Nevada 6.85 
New Hampshire 0.0 
New Jersey 7.0 
New Mexico 5.375 
New York 4.0 
North Carolina 4.5 
North Dakota 5.0 
Ohio 5.5 
Oklahoma 4.5 
Oregon 0. 
Pennsylvania 6.0 
Rhode Island 7.0 
South Carolina 6.0 
South Dakota 4.0 
Tennessee 7.0 
Texas 6.25 
Utah 5.95 
Vermont  6.0 
Virginia 5.0 
West Virginia 6.0 
Wisconsin 5.0 
Washington 6.5 
Washington DC 5.75 
Wyoming 4.0 
+0

오류가 무엇 구조 조정해야 할 수 있습니다? – Mob

+0

java.lang.NumberFormatException : 입력 문자열의 경우 : "Hampshire" – Angel918

답변

0

그것의, 토크 나이 문자열 후 다음 코드를 햄프셔가 이중으로 구문 분석으로 새로운를 분석하기 때문에, 당신은 당신의 코드

+0

Done.But still 내 스크롤 창에 하나의 단어가있는 상태 만 표시됩니다. 계속해서 java.lang.NumberFormatException을 제공합니다. 입력 문자열의 경우 "Hampshire"입니다. – Angel918

+0

'Hampshire'다음에 '0'을 '0.0'으로 변경하십시오. – Mob

+0

그래, 내가 그랬어. 아직 뉴저지를 읽고 햄프셔에서 살고있어. 뉴저지, 사우스 캐롤라이나와 같은 모든 더블 워드 주에서 똑같은 일을하고있어. 그래서 나는 그 국가 [k] = (st.nextToken())라고 생각한다. ; 그게 내가 바꿀 필요가있는 것 나는 변화하는 것을 시도했다 그것은 나에게 더 많은 오류를 준다! – Angel918

관련 문제