0

単純なテキスト ベースのオペレーティング システムを作成しようとしていますが、電卓クラスの実行後にコードでコマンドを入力できない理由がわかりません。「off」と入力するまでコードを実行し続けるはずですが、そうではありません。Eclipse は実行中であると言いますが、何もできません。誰かが私を助けてくれますか?

ここに私の2つのクラスがあります:

public class Calculator extends Start{

public static void calStrt() {

    System.out.print("\nEnter operator you wish to use: ");
    StringInput = scan.nextLine();

    if (StringInput.equals("+")) {

        add();

    } else if (StringInput.equals("-")) {

        sub();

    } else if (StringInput.equals("*")) {

        mul();

    } else if (StringInput.equals("/")) {

        div();

    } else {

        System.out.println("\nSyntax error: Operator not recognized");
        System.out.println("Please try again");
        calStrt();

    }

}

public static void add() {

    System.out.print("\nEnter first number: ");
    intInput = scan.nextInt();
    int intVar1 = intInput;

    System.out.print("\nEnter second number: ");
    intInput = scan.nextInt();
    int intVar2 = intInput;

    System.out.println("\nAnswer: " + (intVar1 + intVar2));

}

public static void sub() {

    System.out.print("\nEnter first number: ");
    intInput = scan.nextInt();
    int intVar1 = intInput;

    System.out.print("\nEnter second number: ");
    intInput = scan.nextInt();
    int intVar2 = intInput;

    System.out.println("\nAnswer: " + (intVar1 - intVar2));

}

public static void mul() {

    System.out.print("\nEnter first number: ");
    intInput = scan.nextInt();
    int intVar1 = intInput;

    System.out.print("\nEnter second number: ");
    intInput = scan.nextInt();
    int intVar2 = intInput;

    System.out.println("\nAnswer: " + (intVar1 * intVar2));

}

public static void div() {

    System.out.print("\nEnter first number: ");
    intInput = scan.nextInt();
    int intVar1 = intInput;

    System.out.print("\nEnter second number: ");
    intInput = scan.nextInt();
    int intVar2 = intInput;

    System.out.println("\nAnswer: " + (intVar1 / intVar2));

}

}




import java.util.Scanner;

class Start {

static Scanner scan = new Scanner(System.in);
static String StringInput;
static int intInput;

public static void main(String[] args) {

    System.out.println("\nWelcome to RobOS");

    passLoop: while (true) {

        System.out.print("\nPlease enter password: ");
        StringInput = scan.nextLine();

        if (StringInput.equals("banana")) {

            System.out.print("Logging in, please wait");
            System.out.print(".");
            System.out.print(".");
            System.out.println(".");

            System.out.println("\nWelcome User");

            outerLoop: while (true) {

                System.out.println("\nType \"help\" to see a list of programs");

                StringInput = scan.nextLine();  

                innerLoop: while (true) {

                    if (StringInput.equalsIgnoreCase("cal")) {

                        Calculator.calStrt();
                        continue outerLoop;

                    } else if (StringInput.equalsIgnoreCase("guess")) {

                        GuessGame.guess();
                        continue outerLoop;

                    } else if (StringInput.equalsIgnoreCase("help")) {

                        System.out.println("\n\"cal\" uses the calculator");
                        System.out.println("\"guess\" plays guessing game");
                        System.out.println("\"help\" shows list of programs");
                        System.out.println("\"off\" turns RobOS off");
                        continue outerLoop;

                    } else if (StringInput.equalsIgnoreCase("off")){

                        break passLoop;

                    } 

                }

            }

        } else { 

            System.out.println("\nWrong password. Please try again");
            continue passLoop;

        }

    }

}

}
4

2 に答える 2

2

ブレントナッシュは正しいです。ただし、エラーを修正するには、代わりにを使用してみてくださいscan.nextInt():これが機能することをInteger.parseInt(scan.nextLine()); 願っています

于 2012-12-11T07:40:39.957 に答える
1

コードが無限ループに陥っています。を呼び出すStringInput = scan.nextLine()と、最初は正常に動作します。入力calして、電卓を 1 回実行できます。問題は、2 回目scan.nextLine()に呼び出されると、空の文字列 "" が の値として自動的に返されることですStringInput。の一連のif/elseステートメントはwhile(true)これを処理する方法がないため、永遠にループします。

より深い理論的根拠はscan.nextInt()、数値を読み取るために呼び出すことですが、問題は、電卓操作のために 2 番目の数値を読み取るときに、まだ "\n" が に座っていることSystem.inです。その結果、ループしてscan.nextLine()再度呼び出すと、まだ座っている "\n" を読み取るだけでSystem.in、無限ループに陥るため、プロンプトは表示されません。

于 2012-04-21T20:20:26.343 に答える