【问题标题】:What is wrong with my while loop in this java program?我在这个 java 程序中的 while 循环有什么问题?
【发布时间】:2012-11-17 19:31:15
【问题描述】:

当我运行程序时,它会运行 else 部分并执行,但在 if 部分它只是一直循环,直到我不得不强行停止它才会停止.我试图在 choice 上为它提供从 1 到 4 的参数以及不低于 1 的 meters 参数。是否有替代参数的方法?

import java.util.*;

public class Project4

{
    public static void showKilometers(double meters) //this is a parameterized function

    {
        double kilometers = meters * 0.001;
        System.out.println(meters +" meters is " + kilometers + " kilometers.");
    }

    public static void showInches(double meters)
    {
        double inches = meters * 39.37;
        System.out.println(meters +" meters is " + inches + " inches.");
    }

    public static void showFeet(double meters)
    {
        double feet = meters * 3.281;
        System.out.println(meters +" meters is " + feet + " feet.");
    }

    public static void quitProgram()
    {
        System.out.println("Goodbye!");
        System.out.println(0);
    }
    public static void showMenu()
    {
        System.out.println(" 1. Convert to kilometers ");
        System.out.println(" 2. Convert to inches ");
        System.out.println(" 3. Convert to feet ");
        System.out.println(" 4. Quit the program ");
        System.out.println(" ");
    }

    public static void main (String [] args)
    {

        double meters;
        int choice;



        Scanner keyboard = new Scanner (System.in);

        System.out.println("Enter a distance in meters: ");
        meters = keyboard.nextDouble();
        while (meters <=0 || meters > 0)
        {
            if (meters > 0)
            {
                showMenu();
                meters = keyboard.nextDouble();
            }
            else
            {
                System.out.println("Please enter a number greater than 1");
                meters = keyboard.nextDouble();
                showMenu();
            }
        }

        choice = keyboard.nextInt();
        switch(choice) //note the use of switch case
            {
            case 1: showKilometers(meters);
            break;
            case 2:showInches(meters);
            break;
            case 3:showFeet(meters);
            break;
            case 4:
            quitProgram();
            }
    }
}

【问题讨论】:

    标签: java loops if-statement while-loop


    【解决方案1】:

    这是一个无限循环。你不妨写while (true)

    试试while (meters &lt;= 0)while (meters &gt;0)

    或者:

    Scanner keyboard = new Scanner (System.in);
    
    System.out.println("Enter a distance in meters: ");
    meters = keyboard.nextDouble();
    while (meters < 1 || meters.isNaN())
    {
        System.out.println("Please enter a number greater than 1");
        meters = keyboard.nextDouble();
        showMenu();
    }
    

    您的输出还指定“大于 1”,因此您的条件需要同意。

    【讨论】:

    • 除非用户足够卑鄙以输入 NaN ;)
    • 他也可以删除 if 。
    • 当程序运行并且while 循环为假时,它不会运行程序的其余部分。
    • @IvanNewYork 它不运行程序的其余部分这不是使用while 循环的意义吗?
    • @John 要添加错误消息,你认为我应该做一个 IF 语句,因为当为 false 时 while 循环不会运行?
    【解决方案2】:
     while (meters <=0 || meters > 0) is an infinite loop
    

    【讨论】:

      【解决方案3】:

      循环中指定的条件是矛盾的。条件必须这样使用:

      while (meters >= 0)
      {
          // logical statements here if the condition is satisfied
      }
      else
      {
          // logical statements here if the condition is not satisfied
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多