我一直在寻找这个问题的答案,但我还没找到能够纠正这个问题的人。我正在尝试填充数组,但检查它是否大于某个值。但是,当我运行它时,我在线程“main”中得到一个异常java.lang.NumberFormatException:对于输入字符串:“”错误。这是代码:
public void setReadData() throws NoSuchElementException {
try {
for (int i = 0; i < getRows(); i++) {
String numbers = p.nextLine();
String[] inputs = numbers.split(" ");
if (inputs.length > getCols()) {
System.out.println("There are more columns than the size specified!\n");
System.exit(1);
}
for (int j = 0; j < getCols(); j++) {
int data = Integer.parseInt(inputs[j]);
this.setData(i,j,data);
}
}
错误代码是:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at foo.Bar.setReadData(Matrix.java:49)
at foo.Bar.main(Matrix.java:226)
非常感谢任何帮助!
---- ---- EDIT
澄清一下,有效的旧代码是:
for (int i = 0; i < getRows(); i++) {
p.nextLine();
for (int j = 0; j < getCols(); j++) {
this.setData(i,j,p.nextInt());
}
}
但是,没有检查是否已检查整行。
答案 0 :(得分:0)
试试这个:
for (int j = 0; j < getCols(); j++) {
if(!inputs[j].equals("")){
int data = Integer.parseInt(inputs[j]);
this.setData(i,j,data);
}
}
答案 1 :(得分:0)
java.lang.NumberFormatException:
当您尝试将无效字符串转换为整数或将空值传递给parseInt()
方法时,将调用此异常。
int var=Integer.parseInt("a");//throw NumberFormatException
int var = Integer.parseInt(“”); //抛出NumberFormatException
答案 2 :(得分:0)
如果输入的行包含两个连续的空格字符,则如果元素为空白,则拆分空格字符将导致一个空格,这可以解释您的错误。
要将多个空格视为一个分隔符,请执行以下操作:
String[] inputs = numbers.split(" +");
将加号添加到拆分正则表达式将消耗数字之间的任何额外空格。
答案 3 :(得分:0)
所以我最终找到了答案。我需要在for循环之上添加p.nextline()
以使其正确读取下一行代码。感谢大家的帮助。非常感谢您的回答。
显然,nextline的作用是抓取当前行的剩余部分,将其输出到任何(如果有的话)等于,并将指针移动到下一行。这就是我遇到问题的原因。