2011-11-10 33 views
1

此程序允许用户计算输入销售额并计算每个州的销售税额。 该程序在读取双字状态(如新泽西州)时发生错误。我需要helo和part。尝试使用字符串标记器读取状态名称时出错

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

其因,分词器解析为一个字符串,然后下一个代码解析汉普郡为double,你可能需要调整你的代码

+0

Done.But仍然我的滚动窗格只显示单个单词的状态,仍然给我java.lang.NumberFormatException:对于输入字符串:“Hampshire”。 – Angel918

+0

尝试将'Hampshire'后面的'0.'改为'0.0'。 – Mob

+0

是的,我做到了。他们仍然读新书,生活在新罕布什尔州。对于新泽西州,南卡罗来纳州等所有双字国家都这样做。所以我认为它的国家[k] =(st.nextToken()) ;我只需要改变我尝试改变它,它给了我更多的错误! – Angel918

相关问题