(Java)当我输入一个非数字(NaN)时,我的程序在应该退出的地方无限循环。

(Java)当我输入一个非数字(NaN)时,我的程序在应该退出的地方无限循环。,java,java.util.scanner,infinite-loop,exit,nan,Java,Java.util.scanner,Infinite Loop,Exit,Nan,只要您输入>-10,代码就应该一直接受这些数字。然后,当您准备退出时,您只需输入数字以外的任何内容,它应该取记录的数字总和的平均值并打印该值,然后退出 当我输入一个非数字(NaN)时,我的程序会无限循环,我不知道如何防止这种情况发生 迄今为止的计划: package project1; import java.util.Scanner; public class mean { public static void main(String[] args) { System.out.pri

只要您输入>-10,代码就应该一直接受这些数字。然后,当您准备退出时,您只需输入数字以外的任何内容,它应该取记录的数字总和的平均值并打印该值,然后退出

当我输入一个非数字(NaN)时,我的程序会无限循环,我不知道如何防止这种情况发生

迄今为止的计划:

package project1;

import java.util.Scanner;

public class mean 
{

public static void main(String[] args) 
{
System.out.println("Enter the Temperature: ");  

Scanner input = new Scanner(System.in);

double value=0.0;
double sum=0;
int i=0;

//This infinitely loops when a non Double value is entered. WHY!?!?!?
while(value != Double.NaN) {
    value = averageTemperature(input, -10);
       sum += value;                           
        i++; 
        System.out.println("I've been here " + i + " time(s)");
       if (value == Double.NaN){
           break;
       }
 }                  


double mean = sum / i;                          

System.out.println("The average temperature is: " + mean);
}




public static double averageTemperature(Scanner input, double lowestTemp)
{
double temp = 0.0;

    if (input.hasNextDouble()) {
    temp = input.nextDouble();

        if(temp >= lowestTemp){                              
        return temp;
        }                         
        else if (temp < lowestTemp)                      
        {
            System.out.println("Invalid temperature. Please Re-enter: ");
            return averageTemperature(input,lowestTemp);   
        } 
    }
    return Double.NaN;  

}
}
packageproject1;
导入java.util.Scanner;
公共类平均数
{
公共静态void main(字符串[]args)
{
System.out.println(“输入温度:”);
扫描仪输入=新扫描仪(System.in);
双值=0.0;
双和=0;
int i=0;
//当输入非双精度值时,它会无限循环。为什么!?!?!?
while(值!=Double.NaN){
值=平均温度(输入,-10);
总和+=数值;
i++;
System.out.println(“我一直在这里”+I+“时间”);
if(值==Double.NaN){
打破
}
}                  
双平均值=总和/i;
System.out.println(“平均温度为:“+平均值”);
}
公共静态双平均温度(扫描仪输入,双最低温度)
{
双温=0.0;
if(input.hasNextDouble()){
temp=input.nextDouble();
如果(温度>=最低温度){
返回温度;
}                         
否则如果(温度<最低温度)
{
System.out.println(“温度无效,请重新输入:”);
返回平均温度(输入,最低温度);
} 
}
返回Double.NaN;
}
}
根据定义,
。因此

不像你想象的那样有效。改用

当我输入非数字(NaN)时

只是为了明确术语,“非数字”和“非数字”不是一回事:

  • 非数字几乎可以是任何东西,例如字母数字字符串
  • not-a-number()是一个特定的浮点值
  • 根据定义,
。因此

不像你想象的那样有效。改用

当我输入非数字(NaN)时

只是为了明确术语,“非数字”和“非数字”不是一回事:

  • 非数字几乎可以是任何东西,例如字母数字字符串
  • not-a-number()是一个特定的浮点值
  • 根据定义,
。因此

不像你想象的那样有效。改用

当我输入非数字(NaN)时

只是为了明确术语,“非数字”和“非数字”不是一回事:

  • 非数字几乎可以是任何东西,例如字母数字字符串
  • not-a-number()是一个特定的浮点值
  • 根据定义,
。因此

不像你想象的那样有效。改用

当我输入非数字(NaN)时

只是为了明确术语,“非数字”和“非数字”不是一回事:

  • 非数字几乎可以是任何东西,例如字母数字字符串
  • not-a-number()是一个特定的浮点值
看啊看啊看啊看啊
while(value != Double.NaN) {