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

そのトークナイザが文字列として新しいを解析し、ので、次のコードは、二重としてハンプシャーを解析し、あなたが

+0

Done.But still私のスクロールペインにはsingle words.stillを与えられた状態のみが表示されます。java.lang.NumberFormatException:入力文字列: "Hampshire" – Angel918

+0

'' Hampshire'の後に '' 0''を '0.0'に変更してみてください。 – Mob

+0

ええ、私はまだニューを読んで、ニュージャージー、サウスカロライナのようなすべてのダブルワード州のために同じことをしてHampshire.itsを暮らしています。その状態[k] =(st.nextToken()) ;それは私が変更する必要があるだけ私はそれが私に多くのエラーを与える変更しようとした! – Angel918

関連する問題