我是Java的初学者。我使用Netbeans。以下是我的代码中的一个片段,用于创建一个简单的计算器来添加两个数字。不包括按钮的自生成代码。
问题
当我尝试将字符串str
转换为函数num1
和plus_buttonActionPerformed
内的整数equal_buttonActionPerformed
时,它会给出一个例外说明:
exception in thread awt-eventqueue-0 java.lang.numberformatexception for input string
我确保字符串不是空的,只需在转换语句上方打印即可。代码有点长。赦免。我在这做错了什么。
public class calc extends javax.swing.JFrame {
/**
* Creates new form calc
*/
public String str = " ";
public String action = " ";
public int num1;
public int num2;
public int res;
public calc() {
initComponents();
}
private void button3ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("3");
result.setText(str);
}
private void button6ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("6");
result.setText(str);
}
private void button9ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("9");
result.setText(str);
}
private void resultActionPerformed(java.awt.event.ActionEvent evt) {
result.setText(str);//
}
private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("1");
result.setText(str);//
}
private void button2ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("2");
result.setText(str);
}
private void button4ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("4"); //
result.setText(str);
}
private void button5ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("5"); //
result.setText(str);
}
private void button7ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("7");
result.setText(str);//
}
private void button8ActionPerformed(java.awt.event.ActionEvent evt) {
str=str.concat("8");
result.setText(str);//
}
private void plus_buttonActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println(str);
num1=Integer.parseInt(str);
System.out.println(num1);
str=" ";
}
private void equal_buttonActionPerformed(java.awt.event.ActionEvent evt) {
num2=Integer.parseInt(str);
res=num1+num2;
str=""+res;
result.setText(str);
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(calc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(calc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(calc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(calc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new calc().setVisible(true);
}
});
}
答案 0 :(得分:3)
作为docs state,在以下情况下发生NumberFormatException:
抛出以指示应用程序已尝试转换a 字符串到其中一个数字类型,但字符串没有 适当的格式。
您尝试解析的String格式不是有效整数。实际上你的String的值是一个空格。
首先,您可以使用trim()
从字符边缘删除空格。即使您将其初始化为空字符串:String str = "";
也会发生NumberFormatException,因为它不是有效的整数。
因此,为它指定一个非null的整数值,它将正确解析。
答案 1 :(得分:1)
您的String str = " ";
在开始时有空格,您正在使用trim()
或设置
String str="";
(由Rudi
和我建议)
String str=" ";
^
要从这类事情中生存下来,最好使用trim()
从String
中删除前导和尾随的Sapces。
Morover我建议您在解析之前检查String
null
检查和Empty
检查
if(str ==null || str.trim().equals("")){
//Than don't parse
}
问题:您无法在concat
null
上使用String
它应为空(至少)或将其设置为<{1}}或"0"
或可解析的整数。