阅读用户输入

时间:2013-10-06 02:48:01

标签: java

我正在尝试让用户输入最多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);

6 个答案:

答案 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++;
 }