Java Eclipseコンソールは、ユーザー入力の値と文字列値を比較する前にプログラムを終了します

パイキング

だから私は弟のためにこのプログラムを作っているのですが、問題にぶつかりました。プログラムは、ユーザーの入力を要求し、一連の「if」ステートメントを介してそれを複数の文字列値と比較することを想定しています。代わりに、ユーザーが入力を入力すると、プログラムが即座に終了します。私はこれに何時間もいて、それについてかなりくすぐられ始めています。これまでに入力したコードは次のとおりです。

package package1;
import java.util.Scanner;

public class Psychic_Calculator {
@SuppressWarnings("resource")
public static void main(String[] args) {

Scanner scan = new Scanner(System.in);  
System.out.println("Hello user, please type your name below:"); 
String a = scan.nextLine();
System.out.println("Welcome " + a + ", think of a number. Once you have your  number, type 'okay' below!");

String b = scan.nextLine();

if (b == "okay"){

System.out.println("Now, add '11' to your number and type 'okay' below.");
    }

else if (b == "Okay"){

System.out.println("Please don't capitalize 'okay', try typing it again!");

String c = scan.nextLine();

if (c == "okay"){

System.out.println("Now, add '11' to your number and type 'okay' below.");

String d = scan.nextLine();

if (d == "okay"){

System.out.println("Now, add '2' to your new number, then type 'okay' below.");

String e = scan.nextLine();

if (e == "okay"){

System.out.println("Now, subtract your original number from your new number, then type 'okay' below.");

String f = scan.nextLine();

if (f == "okay"){

System.out.println("Your new number is '13'. Don't even try denying it.");
                    }
                }
            }
        }

        if (c == "Okay"){

        System.out.println("I already told you not to capitalize 'okay', try typing it again, you idiot!");

        String g = scan.nextLine();

        if (g == "okay"){

        System.out.println("Now, add '11' to your number and type 'okay' below.");

        String h = scan.nextLine();

        if (h == "okay"){

        System.out.println("Now, add '2' to your new number, then type 'okay' below.");

        String i = scan.nextLine();

        if (i == "okay"){

        System.out.println("Now, subtract your original number from your new number, then type 'okay' below.");

        String j = scan.nextLine();

        if (j == "okay"){

        System.out.println("Your new number is '13'. Don't even try denying it.");  
                        }
                    }
                }
            }
        }

        if (c != "okay") {

        while (c != "okay") {

        System.out.println("Do you even know how to spell 'okay'?" + "'" + c + "' does not spell 'okay', you moron! Try typing 'okay' again.");

        String n = scan.nextLine();

        if (n == "okay"){

        System.out.println("Finally, you learned how to spell 'okay'. Your vocabulary is now one word larger, you're welcome. Now, please add '11' to your number and then type 'okay'(correctly this time).");

        String k = scan.nextLine();

        if (k == "okay"){

        System.out.println("Now, add '2' to your new number, then type 'okay' below.");

        String l = scan.nextLine();

        if (l == "okay"){

        System.out.println("Now, subtract your original number from your new number, then type 'okay' below.");

        String m = scan.nextLine();

        if (m == "okay"){

        System.out.println("Your new number is '13'. Don't even try denying it.");  
                }

                }
            }

        }

        else {
            System.out.println(a + ", " + "you have failed to type 'okay' too many times! You have no idea how to spell 'okay' you electricutin' motherboarder! Go shove your face in a pile of computer chips and grow a pair!");

                    System.out.println("(of RAM cartriges...I meant to say RAM cartriges).");
                }   
             }
          }
       }
    }
}
チャックオンウズルイケ

問題は、文字列をどのように比較するかです。変更b == "okay"してb.equals("okay")すべての==比較を.equals()または変更します.equalsIgnoreCase()否定には、(!(c.equals("okay"))

Javaでは、==プリミティブ型を値で比較しますが、オブジェクトをメモリアドレスで比較します。つまり、b == "okay"値の比較を行わないと言うと、これら2つのオブジェクトが同じメモリアドレスを指しているかどうかを確認しますが、これはもちろん誤りです。

更新:このプログラムの作成方法に関するいくつかのこと。

1)不必要にたくさんの文字列オブジェクトを作成しています。どうしても別の文字列オブジェクトが必要になるまで、1つの文字列オブジェクトを再利用することをお勧めします。これは、使用しているすべてのオブジェクトに適用されます。不必要にオブジェクトを割り当てないようにしてください。2)すべてのifステートメントの代わりに、そのような命令の配列を定義して、コードを凝縮することができます。

String [] instr = {"Add 2", "Add 11", "Subtract Original"};//array of directions
String [] invalidResp = {"Wrong", "You can't spell", "Try Again", "No"};//array of responses to print if user doesnt type 'okay' properly
int instrCounter = 0;//you don't really need this but it helps with readability
String userInput = "";//only string object you'll need =)

while (instrCounter < instr.length){//I couldve just as easily used a for loop instead.
   userInput = scan.nextLine();
   while (!userInput.equals("okay")){
      userInput = scan.nextLine();
      System.out.println(invalidResp[(int)   (Math.random()*invalidResp.length)]);
   //will print a random invalid response from the invalidResp array
      System.out.println(userInput + " is not how you spell okay");
   }//end while
   System.out.println("Great, now, " + instr[instrCounter]);
   instrCounter++;
}//end outer while

コードを書くときは、かなり一般的で柔軟なものにする必要があることを忘れないでください。コードを記述した方法で、instr配列に追加したり、無効な応答を追加したりして、不必要にオブジェクトを作成する必要はありません。インラインコメントで言ったように、外側のループにもforループを簡単に使用できましたが、読みやすく、自分が何をしているかを確実に理解できるようにするために、whileループを使用しました。より直感的に読むことができます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

1からxまでの数値を出力するプログラムをJavaで作成していました(xはユーザー入力値です)。これはforループとメソッドステートメントを使用しています

分類Dev

一連の単語をユーザーに照会するJavaプログラムを作成します。ユーザーが「quit」と入力すると、プログラムは終了します。

分類Dev

Javaユーザーがコマンドプロンプトに入力を入力するまでプログラムの実行を停止します

分類Dev

ユーザーが入力した文字列(java)でAの数を小文字と大文字の両方で指定するプログラムを作成する

分類Dev

ユーザー入力を配列Javaからの値と比較する

分類Dev

Java。プログラムは、ユーザーが配列に入力した7つの数字の出現をカウントします

分類Dev

コンソールに入力した単語が回文であるか、Javaでない場合は、プログラムを自分のものにします。

分類Dev

ユーザーがゼロを入力するまでint値を受け入れ、最小の正の整数を見つけるJavaプログラム

分類Dev

Javaでプログラムを終了せずに、入力XML文字列が無効であることをユーザーに通知するにはどうすればよいですか?

分類Dev

javaは外部プログラムへのユーザー入力をシミュレートします

分類Dev

文字列の代わりにユニコード値を出力するJavaプログラム

分類Dev

ユーザー入力をエンコードおよびデコードするJavaプログラム

分類Dev

ユーザーから複数の文字列を読み取り、テキスト ファイルと比較するプログラムを Java で作成する

分類Dev

Javaプログラムのメソッドはユーザー入力を取得しません

分類Dev

Javaのコンソールから(ユーザーが入力するときに)1つの文字を読み取る方法は?

分類Dev

シェル:配列内にコロンを含む値をエコーすると、Javaプログラムの呼び出しに空白の文字列が返されます

分類Dev

Javaプログラミングのユーザー入力値のモードを見つける

分類Dev

シンプルなアプリがAndroidStudio(Java)でユーザー入力値を乗算するようにしようとしています

分類Dev

log4jロガーを使用してEclipseのコンソール出力にJavaプログラムの結果を表示する方法は?

分類Dev

Java、例外は正しく機能しますが、ユーザーは再度入力する機会がなく、コンソールでプログラムが停止しません

分類Dev

Javaのユーザー入力からdowhile / whileループを使用するようにプログラムを編集する

分類Dev

ユーザーにスコア(100点満点)を入力するよう繰り返し促すプログラムを作成するjava

分類Dev

Javaで整数のユーザー入力を逆にするプログラムを作成するにはどうすればよいですか?

分類Dev

Javaプログラムはユーザー入力の受け入れを停止しません

分類Dev

ユーザーから数値(整数)入力を取得し、Javaの配列に挿入します

分類Dev

コンソール入力をjdbではなく実行中のJavaプログラムに渡すにはどうすればよいですか?

分類Dev

Java計算プログラムにユーザー入力の検証を取得するにはどうすればよいですか?

分類Dev

ユーザーがJavaで間違った入力を入力した後、プログラムが終了するのを防ぐ適切な方法は何ですか?

分類Dev

JAVAで終了文字を追加せずに終了文字までユーザー入力テキストをファイルに追加する方法はありますか?

Related 関連記事

  1. 1

    1からxまでの数値を出力するプログラムをJavaで作成していました(xはユーザー入力値です)。これはforループとメソッドステートメントを使用しています

  2. 2

    一連の単語をユーザーに照会するJavaプログラムを作成します。ユーザーが「quit」と入力すると、プログラムは終了します。

  3. 3

    Javaユーザーがコマンドプロンプトに入力を入力するまでプログラムの実行を停止します

  4. 4

    ユーザーが入力した文字列(java)でAの数を小文字と大文字の両方で指定するプログラムを作成する

  5. 5

    ユーザー入力を配列Javaからの値と比較する

  6. 6

    Java。プログラムは、ユーザーが配列に入力した7つの数字の出現をカウントします

  7. 7

    コンソールに入力した単語が回文であるか、Javaでない場合は、プログラムを自分のものにします。

  8. 8

    ユーザーがゼロを入力するまでint値を受け入れ、最小の正の整数を見つけるJavaプログラム

  9. 9

    Javaでプログラムを終了せずに、入力XML文字列が無効であることをユーザーに通知するにはどうすればよいですか?

  10. 10

    javaは外部プログラムへのユーザー入力をシミュレートします

  11. 11

    文字列の代わりにユニコード値を出力するJavaプログラム

  12. 12

    ユーザー入力をエンコードおよびデコードするJavaプログラム

  13. 13

    ユーザーから複数の文字列を読み取り、テキスト ファイルと比較するプログラムを Java で作成する

  14. 14

    Javaプログラムのメソッドはユーザー入力を取得しません

  15. 15

    Javaのコンソールから(ユーザーが入力するときに)1つの文字を読み取る方法は?

  16. 16

    シェル:配列内にコロンを含む値をエコーすると、Javaプログラムの呼び出しに空白の文字列が返されます

  17. 17

    Javaプログラミングのユーザー入力値のモードを見つける

  18. 18

    シンプルなアプリがAndroidStudio(Java)でユーザー入力値を乗算するようにしようとしています

  19. 19

    log4jロガーを使用してEclipseのコンソール出力にJavaプログラムの結果を表示する方法は?

  20. 20

    Java、例外は正しく機能しますが、ユーザーは再度入力する機会がなく、コンソールでプログラムが停止しません

  21. 21

    Javaのユーザー入力からdowhile / whileループを使用するようにプログラムを編集する

  22. 22

    ユーザーにスコア(100点満点)を入力するよう繰り返し促すプログラムを作成するjava

  23. 23

    Javaで整数のユーザー入力を逆にするプログラムを作成するにはどうすればよいですか?

  24. 24

    Javaプログラムはユーザー入力の受け入れを停止しません

  25. 25

    ユーザーから数値(整数)入力を取得し、Javaの配列に挿入します

  26. 26

    コンソール入力をjdbではなく実行中のJavaプログラムに渡すにはどうすればよいですか?

  27. 27

    Java計算プログラムにユーザー入力の検証を取得するにはどうすればよいですか?

  28. 28

    ユーザーがJavaで間違った入力を入力した後、プログラムが終了するのを防ぐ適切な方法は何ですか?

  29. 29

    JAVAで終了文字を追加せずに終了文字までユーザー入力テキストをファイルに追加する方法はありますか?

ホットタグ

アーカイブ