前提・実現したいこと
コンソールに入力した文字列によって平均を求める、または階乗を求める、またはプログラムを終了させるというプログラムを作っているのですが、エラ〜メッセージも発生せずに、文字列も出力されないためどこを直せばいいのかわからず行き詰まってしまいました
例としてはquitと入力すると、プログラムを終了しましたとコンソールに出力され、プログラムを終了し、fact 5と入力した場合、120と出て、isprime 4と入力した場合、NOと出力される。
これをquit,fact n,isprime n,を順にキーボードから受け付けるプログラムです。
おそらく順列を使うというところまでは理解しています
該当のソースコード
java
1public static void main(String[] args) { 2 Scanner sc = new Scanner(System.in); 3 while(true) { 4 String cmd = sc.next(); 5 int n=sc.nextInt(); 6 if(cmd.equals("quit")) { 7 System.out.println("プログラムを終了しました"); 8 }else if(cmd.equals("fact"+n)) { 9 System.out.println(factorial(n)); 10 }else if(cmd.equals("isprime"+n)) { 11 System.out.println(isprime(n)); 12 } 13 } 14 }
java
1package prog; 2import java.util.Scanner; 3public class kadai0802 { 4 static long factorial(int n) { 5 long ans = 1; 6 for(int i = 2; i <= n; i++) { 7 ans *= (long)i; 8 } 9 return ans; 10 } 11 static boolean isprime(int n) { 12 if(n >= 2) { 13 for(int a = 2; a * a <= n; a++) { 14 if(n % a == 0) return false; 15 } 16 return true; 17 } 18 return false; 19 } 20 public static void main(String[] args) { 21 Scanner sc = new Scanner(System.in); 22 while(true) { 23 String cmd = sc.next(); 24 int n=sc.nextInt(); 25 if(cmd.equals("quit")) { 26 System.out.println("プログラムを終了しました"); 27 }else if(cmd.equals("fact"+n)) { 28 System.out.println(factorial(n)); 29 }else if(cmd.equals("isprime"+n)) { 30 System.out.println(isprime(n)); 31 } 32 } 33 } 34 35}
試したこと
最初間違っていると気づいた時は、==演算子を使ってしまっていたのでequalsに直したのですが、それでも出力されませんでした
入力値はquitまたはfact 5または isprime 4で試しています
回答いただいたブレークポイントも試したのですがif(cmd.equals("quit"))の段階ですでにプログラムが動いておらず、修正をどこから加えるべきかわからなくなってしまいました
補足情報(FW/ツールのバージョンなど)
環境はEclipse_2020-09です
回答2件
あなたの回答
tips
プレビュー