質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2738閲覧

キーボードからの入力を順に受け付け、特定の入力が来たら終了するプログラム

NASKA--

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/11/13 17:24

編集2020/11/14 19:21

前提・実現したいこと

コンソールに入力した文字列によって平均を求める、または階乗を求める、またはプログラムを終了させるというプログラムを作っているのですが、エラ〜メッセージも発生せずに、文字列も出力されないためどこを直せばいいのかわからず行き詰まってしまいました
例としては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です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

質問者さんのプログラムとしては、"quit"、"fact"、"isprime"は「実行する処理を指定するコマンド」な訳です。自作のfactorialisprimeメソッドを実行する際はパラメータとしてint型の値を必要としますが、プログラム終了を指定する"quit"には必要ありません。また、コマンドである"fact"と"isprime"の文字列をチェックするときには、パラメータのint型の値をチェックする必要はないはずです。
従って、mainメソッドとして以下のようになるのがひとつの例として適切かと思います。

Java

1 public static void main(String[] args) { 2 Scanner sc = new Scanner(System.in); 3 while (true) { 4 String cmd = sc.next(); 5 if (cmd.equals("quit")) { 6 System.out.println("プログラムを終了しました"); 7 // ループを脱出 8 break; 9 } else if(cmd.equals("fact")) { 10 int n = sc.nextInt(); 11 System.out.println(factorial(n)); 12 } else if(cmd.equals("isprime")) { 13 int n = sc.nextInt(); 14 System.out.println(isprime(n)); 15 } 16 } 17 }

投稿2020/11/14 19:38

dodox86

総合スコア9256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Eclipseを使ってるなら、ブレークポイントを設定することで、コードの途中で実行を止めて変数の中身を見たりできます。
また、1行づつ実行したりもできるんで、そうやって動作を確認してみてはどうでしょう。

たとえば、

if(cmd.equals("quit")) {

の行で実行を止め、そこから1行づつ実行させて、どこでおかしくなるのかを確認しましょう

投稿2020/11/13 23:22

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問