我正在尝试让用户输入最多5个数字,每个数字按空格分隔。
例如
输入最多5个数字:3 4 5
我将在整数和中添加它们,然后用计数器
除以它们获取这些数字的平均值。
但是,我的循环似乎没有结束。我的代码出了什么问题?
int counter = 0 , sum = 0;
Scanner scan = new Scanner(System.in);
System.out.println("enter up to 5 numbers");
while(scan.hasNextInt());{
counter++;
sum += scan.nextInt();
}
System.out.println(counter);
System.out.println(sum);
答案 0 :(得分:1)
您在;
和while
之间添加了{
,因此它会循环播放。删除它。
答案 1 :(得分:0)
Scanner.hasNextInt()
没有做你认为它做的事情。它不会告诉您在已输入的类型中是否存在可用的整数(它没有“已键入”的概念),而是输入等待是否可以读取为整数。如果没有输入已经等待,它将一直阻塞,直到有,所以你的循环只是永远坐在那里,阻止了更多的输入。
您可能想要做的是读取整行,然后将其显式拆分为空格分隔的部分,然后再将它们解析为整数。例如,像这样:
String input = scan.nextLine();
for(String part : input.split(" "))
sum += Integer.parseInt(part);
然而,Serge Seredenko的答案也是正确的,但这是另一个问题。
答案 2 :(得分:0)
代码中的所有内容都很好,除了while循环之后的分号(;),当然它会导致无限循环。
答案 3 :(得分:0)
int counter = 0 , sum = 0;
Scanner scan = new Scanner(System.in);
System.out.println("enter up to 5 numbers");
while(scan.hasNextInt()){
counter++;
sum += scan.nextInt();
if(counter >=5)
break;
}
System.out.println(counter);
System.out.println(sum);
scan.close();
首先,您需要删除';'位于while(scan.hasNextInt())
之后和{
之前; ;
表示while
语句已完成。
其次,当您使用代码时,需要CTRL + Z
来结束输入。添加
if(counter >=5)
break;
当您输入5个数字时,您的输入将会结束。
答案 4 :(得分:0)
如果你想读取整行然后再进行算术运算,那么你就不需要使用hasNextInt()方法进行while循环。
我建议你读取行然后按空格分割并迭代字符串数组。查看代码段。
package com.gaurangjadia.code.java;
import java.util.Scanner;
public class SO19204901 {
public static void main(String[] args) {
int counter = 0,
sum = 0;
System.out.println("enter up to 5 numbers");
Scanner scan = new Scanner(System.in);
String strInput = scan.nextLine();
String[] arrayNumbers = strInput.split(" ");
for (int i = 0; i < arrayNumbers.length; i++) {
int n;
try {
n = Integer.parseInt(arrayNumbers[i]);
}
catch (NumberFormatException e) {
n = 0;
}
sum = sum + n;
counter++;
}
System.out.println(sum);
}
}
答案 5 :(得分:0)
DataInputStream in = new DataInputStream(System.in);
String[]label = {"quiz #","Total","Average"};
int counter = 0;
int theSum = 0;
System.out.print("Enter up to 5 number : ");
String[]tempNum = in.readLine().trim().split("\\s+");
System.out.println();
while (counter <= tempNum.length)
{
if ( counter == tempNum.length)
{
System.out.printf("%10s %12s\n",label[1],label[2]);
counter = 0;
break;
} else {
System.out.printf("%10s",label[0] + (counter+1) );
}
counter++;
}
while(counter <= tempNum.length)
{
if ( counter == tempNum.length)
{System.out.printf("%10d %10.2f\n",theSum,(double)(theSum/counter));
} else
{System.out.printf("%10d",Integer.valueOf(tempNum[counter]));
theSum += Integer.valueOf(tempNum[counter]);
}
counter++;
}