我正在尝试创建一个程序,其中输入由几行组成,第一行表示后续行的字符序列数。这些字符序列将被“”拆分。分裂的字符将被转换为整数并得到它的总和。
For Example:
2
2 3
4 5
2 3 Sum is 5
4 5 Sum is 9
现在,当我输入相同的输入时,我得到了这个......
2
2 3
4 5
Sum is 0
2 3 Sum is 5
4 5 Sum is 9
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 ITweek.sum2(ITweek.java:33)
at ITweek.main(ITweek.java:18)
为什么Sum的返回值为0?和NumberFormatException的错误:对于输入字符串:“”?我不明白。我不知道如何以及在哪里找到答案。任何帮助将不胜感激。谢谢。
这是我的代码..
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Prob {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int loop = input.nextInt();
String numberString[]=new String[loop+1];
for(int i=0; i<=loop; i++){
String ans = input.nextLine();
numberString[i] = ans;
}
sum2(numberString);
}
static void sum2(String []answers){
for(String b : answers){
System.out.print(""+b+" ");
String splittedNumber[] = b.split(" ");
int sum = 0;
for(String j : splittedNumber){
try{
sum=sum+Integer.parseInt(j);
}catch(Exception x){
x.printStackTrace();
}
}
System.out.println("Sum is "+sum);
}
}
}
答案 0 :(得分:0)
这是一个提示,看一下这一行:String numberString [] = new String [loop + 1]; 你初始化的阵列大小是多少,你真正投入了多少项目?
答案 1 :(得分:0)
显然你的问题;),这是代码的这一部分
Scanner input = new Scanner(System.in);
int loop = input.nextInt();
String numberString[]=new String[loop]; //remove last block of array. +1 is useless
for(int i=0; i<=loop; i++){
String ans = input.nextLine();
numberString[i] = ans;
}
sum2(numberString);
}
您从标准输入中读取。首先,您读取一个int并将其传递给循环变量。你的错误在于认为在读完int之后,你会跳到下一行,这不是真的。读完一个int之后,你的缓冲区就可以在第一个char之后立即开始阅读。
基本上,numberString数组中的第一个输入是\ n字符。如果要混合readInt和readLine,请确保在readInt之后指示读取该行的其余部分以使缓冲区前进。您可以在两种情况下使用readLine,也可以在readInt之后使用readLine并将\ n扔到垃圾箱中。
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int loop = Integer.parseInt(input.readLine());
String numberString[]=new String[loop]; //remove last block of array. +1 is useless
for(int i=0; i<loop; i++){
String ans = input.nextLine();
numberString[i] = ans;
}
sum2(numberString);
或
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int loop = input.readInt());
input.readLine;
String numberString[]=new String[loop]; //remove last block of array. +1 is useless
for(int i=0; i<loop; i++){
String ans = input.nextLine();
numberString[i] = ans;
}
sum2(numberString);
答案 2 :(得分:0)
main
方法中存在一些需要修复的错误。
Scanner input = new Scanner(System.in);
//create a new scanner to read string as input doesn't advance to next line after reading int
Scanner inputString = new Scanner(System.in);
int loop = input.nextInt();
//loop through to enter your input and process with method call.
for (int i = 0; i < loop; i++) {
//you just need one element array to store input string which is separated by whitespace
String numberString[] = new String[1];
numberString[0] = inputString.nextLine();
sum2(numberString);
}
发生NFE是因为尝试将空字符串转换为Integer。我希望它有所帮助。