错误表示在尝试将字符串转换为double时在main中定义的变量然后表示未知符号

时间:2013-01-29 04:04:36

标签: java user-interface typeconverter

我已经找了40多分钟试图在这个网站上找到可能与我的问题有关的答案,但没有用。

我很难过。我正在尝试将程序转换为GUI。我正在使用Textpad,它在编译时告诉我变量已在main方法中定义。然后当转换为int或double时,它告诉我它找不到符号并指向我想要转换的变量。然后在我的计算过程中,它告诉我二进制运算符'*'的错误操作数类型。

import javax.swing.JOptionPane;

public class PayrollGUI {

// calculates payroll
public static void main (String [] args) {

String name = JOptionPane.showInputDialog ("Employee's Name: ");
int name = Integer.parseInt(nameString);

String hours = JOptionPane.showInputDialog ("Number of hours worked in a week (e.g., 10: ");
int hours = Integer.parseInt(hoursString);

String payRate = JOptionPane.showInputDialog ("Hourly pay rate (e.g., .6.75: ");
double payRate = Double.parseDouble(payRateString);

String federalTaxRate = JOptionPane.showInputDialog ("Federal tax witholding rate (e.g., .20: ");
double federalTaxRate = Double.parseDouble(federalTaxRateString);

String stateTaxRate = JOptionPane.showInputDialog (" State tax witholding rate (e.g., .09: ");
double stateTaxRate = Double.parseDouble(stateTaxRateString);

//calculate witholdings, grosspay and netpay
double federalWitholding = federalTaxRate * (hours * payRate);
double stateWitholding = stateTaxRate * (hours * payRate);
double grossPay = hours * payRate;
double netPay = grossPay - withholdings;
double witholdings = federalWithodling + stateWitholding;

//format to keep two digit decimal
witholdings = (int) (witholdings * 100) /100.0;
netPay = (int) (netPay * 100) / 100.0;
grossPay = (int) (grossPay * 100) / 100.0;
federalWitholding = (int) (federalWitholding * 100) / 100.0;
stateWitholding = (int) (stateWitholding *100) / 100.0;

/*String output = (null);
String output = (null);*/
String output = "Employee Name: " + name +
"/nHours Worked: "  + hours +
"/nPay Rate: $" + payRate +
"/nGross Pay: $" + grossPay +
"/nDeductions:" +
"/n     Federal Witholding: $" + federalWitholding +
"/n     State Witholding : $" + stateWitholding +
"/n     Total Deductions : $" + witholdings +
"/n     Net Pay: $";
JOptionPane.showMessageDialog(null, output);
}//end main
}//end Payroll

3 个答案:

答案 0 :(得分:5)

String name = ...;
int name = ...;

不能这样做。

String name替换为String nameString,因为这是您在使用Integer.parseInt时尝试解析的变量! (并且不要忘记所有其他变量!)

e.g。

带有String hours

String hoursString
String payRate String payRateString的{​​{1}} String federalTaxRate String federalTaxRateString的{​​{1}} String stateTaxRateString stateTaxRateString

。{

答案 1 :(得分:5)

  1. 由于namehourspayRate,....变量被声明两次,因此无法编译。将每个人改为另一个名字
  2. 您的parseIntparseDouble语句不好,因为输入的格式可能不正确(字母表或其他内容)。因此,您需要使用try/catch来验证输入
  3. witholdings = (int) (witholdings * 100) /100.0;这不是保持2位数格式的方法。阅读this
  4. 尝试使用更好的IDE。如果您不熟悉java,请查看jcreatorbluej

答案 2 :(得分:1)

在一个方法中不能有两个相同的变量名。在您的代码中,您有许多重复变量,就像下面的变量一样。您不能在同一方法中使用两个name变量。

String name = JOptionPane.showInputDialog ("Employee's Name: ");
int name = Integer.parseInt(nameString);

如果您使用任何IDE for Java,如Eclipse,您可以轻松解决这些编译问题,而不是Textpad。