web-dev-qa-db-ja.com

文字列がオブジェクトまたはJavaのその他の文字列値と等しくないかどうかをどのように確認しますか?

ユーザーが設定できるクロックを作成しようとしています。ユーザーに質問をしてもらい、「はい」または「いいえ」などの言葉で答えてもらいたいと思いました。ユーザーが秒を表示するかどうかなど、このコードを使用して変更しないものに対してそれを行いましたが、たとえばAMから=に文字列を変更する場合は機能しませんPM時間が12を超える場合、ここで使用しているのは次のとおりです。

    System.out.println("AM or PM?"); 
    Scanner TimeOfDayQ = new Scanner(System.in);
    TimeOfDayStringQ = TimeOfDayQ.next();

    if(!TimeOfDayStringQ.equals("AM") || !TimeOfDayStringQ.equals("PM")) {
        System.out.println("Sorry, incorrect input.");
        System.exit(1);
    }

    ...

    if(Hours == 13){
        if (TimeOfDayStringQ.equals("AM")) {
            TimeOfDayStringQ.equals("PM");
        } else {
            TimeOfDayStringQ.equals("AM");
        }
                Hours = 1;
        }
     }

AM、PM、またはその他の賢明な入力を促すプロンプトが表示されたときに何かを入力するたびに、書いたエラーが表示されて終了します。エラーでプログラムを終了するコードのセクションを削除しても、文字列はAMからPM時間が13に等しい場合は変更されません。ご協力ありがとうございます。

20
Pillager225

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

System.out.println("AM or PM?"); 
Scanner TimeOfDayQ = new Scanner(System.in);
TimeOfDayStringQ = TimeOfDayQ.next();

if(!TimeOfDayStringQ.equals("AM") && !TimeOfDayStringQ.equals("PM")) { // <--
    System.out.println("Sorry, incorrect input.");
    System.exit(1);
}

...

if(Hours == 13){
    if (TimeOfDayStringQ.equals("AM")) {
        TimeOfDayStringQ = "PM"; // <--
    } else {
        TimeOfDayStringQ = "AM"; // <--
    }
            Hours = 1;
    }
 }
26
Eng.Fouad

&&を使用して、「AM」と等しくなく、「PM」と等しくないことを確認します。

_if(!TimeOfDayStringQ.equals("AM") && !TimeOfDayStringQ.equals("PM")) {
    System.out.println("Sorry, incorrect input.");
    System.exit(1);
}
_

明確にするためにあなたもできる

_if(!(TimeOfDayStringQ.equals("AM") || TimeOfDayStringQ.equals("PM"))){
    System.out.println("Sorry, incorrect input.");
    System.exit(1);
}
_

コードにnot (one or the other)句を含める((サイレント)括弧を忘れないでください)

13
ratchet freak

||を変更します&&にすると、答えが「AM」でも「PM」でもない場合にのみ終了します。

1
goto10