Java 在同一扫描变量中使用ints/DOUBLE和字符串

Java 在同一扫描变量中使用ints/DOUBLE和字符串,java,Java,所以我是java编程新手,来自Python,有一些概念我不太理解 我正在写一个程序,它允许用户输入他们想要的任意数量的数字,并且程序应该输出所有数字的平均值。我使用了一个while循环来循环用户输入的任意次数,但是我需要一种退出循环的方法,以便程序可以继续计算所有输入的平均值。我决定,如果用户输入一个“=”符号而不是一个数字,那么程序将跳出循环,但是由于Scanner变量正在寻找一个double,并且“=”符号不是一个数字,因此我必须将其设置为字符串。但由于扫描仪正在查找双精度,程序在遇到“=”

所以我是java编程新手,来自Python,有一些概念我不太理解

我正在写一个程序,它允许用户输入他们想要的任意数量的数字,并且程序应该输出所有数字的平均值。我使用了一个while循环来循环用户输入的任意次数,但是我需要一种退出循环的方法,以便程序可以继续计算所有输入的平均值。我决定,如果用户输入一个“=”符号而不是一个数字,那么程序将跳出循环,但是由于Scanner变量正在寻找一个double,并且“=”符号不是一个数字,因此我必须将其设置为字符串。但由于扫描仪正在查找双精度,程序在遇到“=”时抛出了一个错误

当用户键入“=”时,如何使程序退出循环?我知道我可以允许用户输入一个打破循环的数字,但如果这是一个真实世界的程序,用户输入了一个数字,它会在计算平均值时将该数字与之前的数字一起计算。我目前掌握的守则如下:

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);

        }
}

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

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

Integer.parseInt(String s)
或者,您可以检查下一步内容并相应阅读:

while (scanner.hasNext()) {
                if (sc.hasNextInt()) {
                   int a = scanner.nextInt();
                } else if (scanner.hasNextLong()) {
                   //...
                }
}
或者您可以捕获
输入不匹配异常
,然后从那里开始工作

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

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

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

Integer.parseInt(String s)
或者,您可以检查下一步内容并相应阅读:

while (scanner.hasNext()) {
                if (sc.hasNextInt()) {
                   int a = scanner.nextInt();
                } else if (scanner.hasNextLong()) {
                   //...
                }
}
或者您可以捕获
输入不匹配异常
,然后从那里开始工作

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

可能重复的可能重复的感谢!我在教程中还没有提到错误处理,所以我没有想到这一点。谢谢你!我认为在您的第二个示例代码中,while循环不会终止,除非您指定终止条件(如果我错了,请纠正我)。因此,也许可以实现以下算法:当扫描器有一个标记,并且转换为字符串的标记不是“=”符号时,继续获取nextInt并计算平均值。否则,while循环将永远不知道何时停止寻找下一个token@AleksandrH这个例子只是为了展示如何检查输入,OP已经展示了他知道如何使用
break
。谢谢!我在教程中还没有提到错误处理,所以我没有想到这一点。谢谢你!我认为在您的第二个示例代码中,while循环不会终止,除非您指定终止条件(如果我错了,请纠正我)。因此,也许可以实现以下算法:当扫描器有一个标记,并且转换为字符串的标记不是“=”符号时,继续获取nextInt并计算平均值。否则,while循环将永远不知道何时停止寻找下一个token@AleksandrH这个例子只是为了说明如何检查输入,OP已经说明他知道如何使用
break