プログラムは、メットフッド内から早期に終了できますか?

Nov 25 2020

私は、ユーザーに質問をし、次に進むために正しい答えを与えなければならない単純な「ゲーム」を作成しています。これは、質問の1つに対して現在持っているコードです。

public static void Mascot() {
    Scanner console = new Scanner(System.in);
    System.out.println("what Is our school mascot?");
    String Tony = console.nextLine();
    String b = Tony;
    Scanner scanner= new Scanner(b);
    if (scanner.hasNext("tiger")){
        System.out.println("Good, next riddle.");
    } else{ 
    }
    scanner.close();
    console.close();
}

ifステートメントで大文字と小文字を区別せず、スキャナーにtigerが入力された場合はtrueを返します。誰かがスキャナーに全文を入力することができ、虎という単語がどこかにある場合、それは真として返されます。しかし、タイガー(または他の質問に対する他の間違った答えがスキャナーに入力された場合、プログラムを停止して、次の質問に進まないようにします。

回答

1 VinodJayachandran Nov 26 2020 at 05:45

ここで注意すべき点がいくつかあります。

  1. ゲームを続行するかどうかは、理想的にはメソッドの呼び出し元が制御する必要があります。メソッドの呼び出し元は、戻り値trueまたはfalseに基づいて決定する必要があります
  2. (1)に対応するには、メソッドのシグネチャを変更する必要があります。それを無効にすることはできません。ブール値である必要があります。
  3. tigerが含まれているかどうかを確認するために2番目のスキャナーオブジェクトは必要ありません

このコードが役立つかどうかを確認してください

public static boolean Mascot() {
        Scanner console = new Scanner(System.in);
        try {
            System.out.println("what Is our school mascot?");
            String b = console.nextLine();
           
            if (b.toLowerCase().contains("tiger")){
                System.out.println("Good, next riddle.");
                return true;
            } else{
                return false;
            }
        }
        catch(Exception e) {
            System.out.println("Exception Occurred");
        }
        finally {
            console.close();
        }
        return false;
    }