2011-11-10 41 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

相關問題