在同一个Scanner变量

时间:2016-10-08 22:12:45

标签: java

所以我是Java编程的新手,来自Python,还有一些我无法理解的概念。

我正在编写一个程序,允许用户输入任意数量的数字,程序应输出所有数字的平均值。我使用while循环来循环用户输入的次数,但是我需要一种退出循环的方法,以便程序可以继续计算所有输入的平均值。我决定如果用户输入" ="标志而不是数字,然后程序将突破循环,但由于Scanner变量正在寻找一个双重,并且" ="标志不是数字,我必须使它成为一个字符串。但是因为Scanner正在寻找一个双重程序,程序在遇到" ="时会抛出一个错误。

当用户键入" ="?时,如何让程序退出循环?我知道我可以让用户输入一个打破循环的数字,但是如果它是一个真实的世界程序并且用户输入了一个数字,那么在计算平均值时它将计算该数字以及之前的数字。我到目前为止的代码如下:

import java.util.Scanner;
// imports the Scanner class

public class Average{
    public static void main(String[] args){
        double num, total = 0, noOfInputs = 0, answer;
        Scanner scanner = new Scanner(System.in);

        while(true){
            System.out.print("Enter number: ");
            //Prompts the user to enter a number

            num = scanner.nextDouble();
            /*Adds the number inputted to the "num" variable. This is the
            source of my problem*/

            if(num.equals("=")){
                break;}
            /*The if statement breaks the loop if a certain character is
            entered*/

            total = total + num;
            //Adds the number inputted to the sum of all previous inputs

            noOfInputs++;
            /*This will be divided by the sum of all of the numbers because
              Number of inputs = Number of numbers*/
        }

        answer = total / noOfInputs;
        System.out.print(answer);

        }
}

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。

您可以将每个数字作为字符串读取,然后如果是数字,则解析它以获取值。

Integer.parseInt(String s)

或者您可以检查接下来会发生什么并相应地阅读:

while (scanner.hasNext()) {
                if (sc.hasNextInt()) {
                   int a = scanner.nextInt();
                } else if (scanner.hasNextLong()) {
                   //...
                }
}

或者你可以抓住InputMismatchException,并从那里开始工作。

try{
  ...
} catch(InputMismatchException e){
  //check if  '=' ...
}