java - (Java)当我输入一个非数字(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.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;  

}
}

最佳答案

根据定义,NaN is not equal to anything, including itself 。因此

while(value != Double.NaN) {

无法按您的预期工作。使用Double.isNaN()相反。

When I enter a non-number (NaN)...

为了澄清术语,“非数字”和非数字不是同一件事:

  • 非数字几乎可以是任何东西,例如字母数字字符串;
  • 非数字 ( NaN ) 是特定的 IEEE 754浮点值。

关于java - (Java)当我输入一个非数字(NaN)时,我的程序在应该退出的地方无限循环。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26251403/

相关文章:

python - 键盘中断不会停止我的翻译

java - Junit 预期异常 : expect an exact Exception object

java - 无状态类有多少字节?

java - 利用扫描仪填充对象数组列表

java - 使用近似方法实现 sqrt 方法。即使条件为假也无法退出循环

java - 编写无限循环

java - JList 从 jlist 检索数据

java - Android,java类未找到异常

java - 无法从java中的输入文件读取int

Java 使用 String[] args 作为输入,如何检索其内容?