我正在编写一个小程序,它读取输入并设置数组大小,填充数组并添加数字。我的问题是,虽然我没有收到任何错误,但程序会在一段时间后停止。任何关于我做错的指示都将非常感激。
public class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] numbers = new int[in.nextInt()];
int sum = 0;
System.out.println("\n" + "numbers: " + numbers.length);
while (in.hasNextLine()) {
for (int i = 0; i < numbers.length; i++) {
numbers[i] = in.nextInt();
// System.out.println(numbers[i]);
}
}
for (int i = 0; i <= numbers.length; i++) {
sum += numbers[i];
}
System.out.println(sum);
}
}
答案 0 :(得分:3)
由于Scanner.hashNextLine()的JavaDoc声明:
如果此扫描仪的输入中有另一行,则返回true。 此方法可能会在等待输入时阻止。扫描仪不会 超越任何输入。
所以你的while循环永远不会完成:
while (in.hasNextLine())
只需删除此循环,你的for循环内部已经做了正确的工作。
PS:正如jipr311所说,修复你的第二个for循环,否则你将面临ArrayIndexOutOfBoundsException
:
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
答案 1 :(得分:2)
没有使用while循环。删除它。 并像
一样编辑for循环 for (int i = 0; i < numbers.length; i++)
答案 2 :(得分:2)
这应该有效:
public static void main(String[] args) {
Scanner in = null;
try{
in = new Scanner(System.in);
int[] numbers = new int[in.nextInt()];
int sum = 0;
System.out.println("\n" + "numbers: " + numbers.length);
int count = 0;
while (count < numbers.length) {
numbers[count] = in.nextInt();
count++;
}
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println(sum);
}finally{
if(null != in){
in.close();
}
}
}
由于扫描仪对象未关闭,程序中也存在资源泄漏。我纠正了它。
答案 3 :(得分:2)
不需要while
循环
for (int i = 0; i < numbers.length; i++) {
if(in.hasNextInt())
numbers[i] = in.nextInt();
// System.out.println(numbers[i]);
}