【问题标题】:if...elseif error while entering values again and againif...elseif 一次又一次输入值时出错
【发布时间】:2015-10-16 19:09:54
【问题描述】:

在这个程序中,我必须在循环中一次又一次地输入温度。当我输入温度时,它会显示正确的显示,但是当我再次输入温度时,程序会自行终止。

代码是:

import java.util.Scanner;

public class CheckTemperature
{
    public static void main(String [] args) 
    {
        final double TEMPERATURE = 102.5;
        double thermostat;

        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter the substance's temperature: ");
        thermostat = keyboard.nextDouble();

        if(thermostat > TEMPERATURE)
        {
            System.out.print("The temperature is too high. ");
            System.out.print("Turn down the thermostat. ");
            System.out.println("Wait for 5 minutes and check the thermostat again. "); 
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();
        }
        else if(thermostat < TEMPERATURE)
        {
            System.out.println("The temperature is low.");
            System.out.println("Turn up the thermostat.");
            System.out.println("Check for 5 minutes and check again.");
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();
        }
        else if(thermostat == TEMPERATURE)
        {
            System.out.println("The temperature is acceptable. Check again in 15 minutes.");
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();
        }
        else
        {
            System.out.println("Enter the correct temperature value ");
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();
        }
    }
}

【问题讨论】:

  • ...一遍又一遍地循环。您的代码没有任何循环。

标签: java loops if-statement


【解决方案1】:

您的代码不是为了“重复”任何任务 AKA 迭代而构建的。在您的代码中添加一个循环,使其根据需要重复操作。

这里我们使用while (1==1) 来创建一个无限循环。此外,我们在检查输入 == "X" 时添加了退出条件,这会从循环中触发 System.exit。这有助于保持应用程序的正常退出,而无需强制关闭。

    final double TEMPERATURE = 102.5;
    double thermostat;
    while(true){
           Scanner keyboard = new Scanner(System.in);
           System.out.println("Enter the substance's temperature or press X to exit: ");
           String input = keyboard.next();
           if(input.equals("X")){
              System.exit(0);
           } else{
              thermostat = Double.parseDouble(input);   
              if(thermostat > TEMPERATURE) {
                    System.out.print("The temperature is too high. ");
                    System.out.print("Turn down the thermostat. ");
                    System.out.println("Wait for 5 minutes and check the thermostat again. "); 
                } else if(thermostat < TEMPERATURE) {
                    System.out.println("The temperature is low.");
                    System.out.println("Turn up the thermostat.");
                    System.out.println("Check for 5 minutes and check again.");
                } else if(thermostat == TEMPERATURE) {
                    System.out.println("The temperature is acceptable. Check again in 15 minutes.");
                } else {
                    System.out.println("Enter the correct temperature value ");
                }
           }
    }

【讨论】:

  • (keyboard.nextString().equals("X") 正在返回找不到符号错误。我使用 0 键退出,因为我正在读取双精度值。错误是:CheckTemperature.java: 13: 错误: double 不能被取消引用 if(keyboard.nextDouble().equals("0")) ^ 1 错误
  • 哎呀..对不起。我的错。应该是keyboard.next()。修复它并更新了答案。
【解决方案2】:

这是因为您不在循环中。你在顶部问一次温度。 然后一次if,那么就结束了。

public static void main(String [] args) 
{
    final double TEMPERATURE = 102.5;
    double thermostat;
    Scanner keyboard = new Scanner(System.in);

    while (true) {
        System.out.println("Enter the substance's temperature: ");
        thermostat = keyboard.nextDouble();

        if(thermostat > TEMPERATURE)
        {
            System.out.print("The temperature is too high. ");
            System.out.print("Turn down the thermostat. ");
            System.out.println("Wait for 5 minutes and check the thermostat again. ");
        }
        else if(thermostat < TEMPERATURE)
        {
            System.out.println("The temperature is low.");
            System.out.println("Turn up the thermostat.");
            System.out.println("Check for 5 minutes and check again.");
        }

        else if(thermostat == TEMPERATURE) {

            System.out.println("The temperature is acceptable. Check again in 15 minutes.");
        }

        else{
            System.out.println("Enter the correct temperature value ");
        }
    }
}

小心,while 永远不会停止,但你可以随意改变条件。

【讨论】:

  • 为什么是while (1 == 1) 而不是while (true)
  • 最后一个else 是多余的,thermostat 不可能既小于、等于也不大于常量。
  • @Clashsoft 好吧,你可以输入NaN(它会被正确解析),并且NaN 不大于/小于/等于/等于任何东西,甚至它本身,所以你'将在最后一个 else 块中结束。
  • @Roman,因为我赶时间。我回答得很快。如果你愿意,你可以编辑,或者我明天再做。谢谢
  • @Roman 请对此提出一些更正建议:我使用该行 as 并给出错误,因为无法取消引用 double : value=keyboard.nextDouble(); if(keyboard.equals("0"))
【解决方案3】:

如果您想一次又一次地获取温度,则必须使用循环。

while(true){
    if(thermostat > TEMPERATURE)
        {
            System.out.print("The temperature is too high. ");
            System.out.print("Turn down the thermostat. ");
            System.out.println("Wait for 5 minutes and check the thermostat again. "); 
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();

        }
        else if(thermostat < TEMPERATURE)
        {
            System.out.println("The temperature is low.");
            System.out.println("Turn up the thermostat.");
            System.out.println("Check for 5 minutes and check again.");
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();

        }

        else if(thermostat == TEMPERATURE) {

            System.out.println("The temperature is acceptable. Check again in 15 minutes.");
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();
        }

        else{
            System.out.println("Enter the correct temperature value ");
            System.out.println("Enter the thermostat here: ");
            thermostat = keyboard.nextDouble();
        }
    }

【讨论】:

    【解决方案4】:

    Murtaza,您可以只使用循环,也可以使用任何递归方法并在您的主要方法中调用它。您所说的 DOUBLE CANNOT BE DEREFERENCED 错误是由于没有像 equals 这样的方法() 在 Scanner 类中。此外,您不应将 int 值与 double 类型变量进行比较。再次,要在 if-else 块内进行比较,您应该使用 Double 中存在的 equals() 方法,包装类反对传递一个对象作为它的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多