だから私は弟のためにこのプログラムを作っているのですが、問題にぶつかりました。プログラムは、ユーザーの入力を要求し、一連の「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]
コメントを追加