1

私はクラスのプロジェクトに取り組んでおり、コードがそのように動作している理由を理解するのに役立つことがあります。この割り当ては、「ゼロ除算」シナリオを回避しながら、2 つの整数を入力し、それらに対して実行する算術演算を選択するようにユーザーに促すことです。ここに私のコードのセクションがあります:

import java.util.Scanner;

public class Program3 
{

public static void main(String[] args) 
{

    double operandOne;
    double operandTwo;
    char newLine = '\n';
    Scanner input = new Scanner (System.in);

    //"input" is an object which calls for input from the keyboard.

        System.out.print("This program will request values for two operands ");
        System.out.println("and perform an arithmetic operation of your choice on them.");
        System.out.println(newLine + "Please enter a value for the first operand.");
        operandOne = input.nextDouble();

        System.out.println("Thank you.  Please enter a value for the second operand.");
        operandTwo = input.nextDouble();

        // This section explains what's going on to the user and requests input for the operands.

        if ( operandTwo == 0 )
        {

            System.out.print("You will not be able to perform division if the ");
            System.out.println("second operand is zero!");
            System.out.println(newLine + "Please choose an option:");
            System.out.println("Type 1 to select a new value for the second operand.");
            System.out.println("Type 2 to continue with a value of zero.");

            // You can't divide by zero!  Are you SURE you want to use that number?

            int reallyWantZero = input.nextInt();
            do
            {   
                System.out.println(newLine + "You must type either 1 or 2 and press enter.");
                reallyWantZero = input.nextInt();
            }

            while ((reallyWantZero < 1) || (reallyWantZero > 2));
            {
                switch (reallyWantZero)
            {
                case 1:
                    System.out.println(newLine + "Please enter a new value for the second operand.");
                    operandTwo = input.nextDouble();
                break;
                case 2:
                    System.out.println(newLine + "Okay, we will proceed.");
                    break;
            }
            }
        }

コードを実行すると、次のようになります。

"第 1 オペランドの値を入力してください。

1

ありがとうございました。第 2 オペランドの値を入力してください。

0

2 番目のオペランドがゼロの場合、除算を実行できません。

オプションを選択してください:

1 を入力して、2 番目のオペランドの新しい値を選択します。値ゼロで続行するには、2 を入力します。

2

1 または 2 を入力して、Enter キーを押す必要があります。

2

わかりました、進めます。」

2 を入力して続行するのは 1 回目は受け付けないのに、2 回目は受け付ける理由がわかりません。何が起こっているのか、どうすれば修正できるのかを説明してくれる人はいますか?

前もって感謝します!

編集:

コードを次のように変更しました。

わかりました、あなたの言いたいことは理解できますが、うまくいかないようです。コードを次のように変更しました。

while ((reallyWantZero < 1) || (reallyWantZero > 2));
                {
                    System.out.println(newLine + "You must type either     1 or 2 and press enter.");
                    reallyWantZero = input.nextInt();
                }               
                switch (reallyWantZero)
                {
                    case 1:

それでもまったく同じように動作します。また、無効な数値を入力すると、プログラムがハングアップし、何も返されません。

それでもまったく同じように動作します。また、無効な数値を入力すると、プログラムがハングアップし、何も返されません。

4

2 に答える 2

5

do...whileループは常に少なくとも 1 回は実行されるため

do
{   
    System.out.println(newLine + "You must type either 1 or 2 and press enter.");
    reallyWantZero = input.nextInt();
} 
while ((reallyWantZero < 1) || (reallyWantZero > 2));

ループ本体を1回実行してから条件をチェックします。したがって、常にコードのこの部分を入力します。つまり、ユーザーは少なくとも 2 回入力するよう求められます。ループに入る前にループの状態をチェックする while ループを使用する必要があります。

例えば

while ((reallyWantZero < 1) || (reallyWantZero > 2)) {
    System.out.println(newLine + "You must type either 1 or 2 and press enter.");
    reallyWantZero = input.nextInt();
}
于 2013-03-14T16:50:50.917 に答える
1

なぜだけではないのですか

while (reallyWantZero != 1 && reallyWantZero != 2) {
    System.out.println("enter 1 or 2");
    reallyWantZero = input.nextInt();
}

//do stuff here with that info
于 2013-03-14T16:55:20.743 に答える