0

プログラムを実行すると、 else部分が実行されて実行されますが、if部分ではループし続け、強制的に停止するまで停止しません。1 から 4 までの選択肢のパラメーターと、1 を下回らないメーターのパラメーターを指定しようとしています。パラメーターを指定する代わりの方法はありますか?

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();
            }
    }
}
4

3 に答える 3

3

無限ループです。あなたも書くかもしれませんwhile (true)

while (meters <= 0)またはのいずれかを試してくださいwhile (meters >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より大きい」も指定されているため、条件に同意する必要があります。

于 2012-11-17T19:33:08.927 に答える
1
 while (meters <=0 || meters > 0) is an infinite loop
于 2012-11-17T19:34:25.063 に答える
0

ループで指定された条件が矛盾しています。条件は次のように使用する必要があります。

while (meters >= 0)
{
    // logical statements here if the condition is satisfied
}
else
{
    // logical statements here if the condition is not satisfied
}
于 2013-11-06T09:43:49.243 に答える