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

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

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

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

2回答

2716閲覧

コマンドラインからの入力条件による処理の記載

icecleam

総合スコア46

Java

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2020/07/25 06:56

以下のコード([SumScore.java])にさらに下記のような2つの機能を追加したいです。
1,得点を入力しないと警告メッセージを出す。
2,得点は 0~100 (小数点を含まない)点の範囲以外で入力すると警告メッセージを出す。

以下に途中まで作成したコードを載せておきますので、お手数ですがご教授いただけると幸いです。

得点入力で、未入力の場合と、0100 (小数点を含まない)点の範囲以外で入力しても動作が終了してしまいます。
該当箇所は以下になります。
また、Exceptionを使った処理の方がいいのであれば、そちらでご回答いただけると嬉しいです。
if(inParam2.equals("")){
System.out.print("得点を入力してください。");
} else if(inParam2 >= 0 && 100 >= inParam2)
System.out.print("得得点は 0
100点の範囲で入力してください。");

要望が多くて申し訳ありませんが、宜しくお願いします。

java

1import java.util.HashMap; 2 3public class Person { 4 String name; 5 HashMap<String, Integer> recordMap; 6 7 public Person(String name) { 8 this.name = name; 9 } 10 11 public int calcSum() { 12 int kokugo = (recordMap.get("国語")).intValue(); 13 int sansu = (recordMap.get("算数")).intValue(); 14 int rika = (recordMap.get("理科")).intValue(); 15 int syakai = (recordMap.get("社会")).intValue(); 16 return kokugo + sansu + rika + syakai; 17 } 18}

java

1import java.io.BufferedReader; 2import java.io.InputStreamReader; 3import java.util.HashMap; 4 5public class SumScore { 6 7 public SumScore() { 8 } 9 10 11 public static void main(String[] args) { 12 13 try (InputStreamReader inStream = new InputStreamReader(System.in); 14 BufferedReader bufReader = new BufferedReader(inStream)) { 15 16 int kazu = 0; 17 System.out.print("何人分の成績を入力しますか(数字で入力): "); 18 try { 19 String inParam = bufReader.readLine(); 20 kazu = (int) Integer.parseInt(inParam); 21 if (kazu <= 0) { 22 System.out.println("人数は1以上にしてください。"); 23 System.exit(1); 24 } 25 } catch (NumberFormatException e) { 26 System.out.println("人数は整数で指定してください。"); 27 System.exit(1); 28 } 29 30 Person person[] = new Person[kazu]; 31 for (int i = 0; i < kazu; i++) { 32 System.out.print((i + 1) + "人目の名前: "); 33 34 String inName = bufReader.readLine(); 35 36 if(inName.equals("")){ 37 System.out.print("名前を入力してください。"); 38 } else { 39 40 person[i] = new Person(inName); 41 HashMap<String, Integer> recordMap = new HashMap<String, Integer>(4); 42 43 System.out.print("国語:"); 44 Integer inParam2 = Integer.valueOf(bufReader.readLine()); 45 46 if(inParam2.equals("")){ 47 System.out.print("得点を入力してください。"); 48 } else if(inParam2 >= 0 && 100 >= inParam2) 49 System.out.print("得得点は 0~100点の範囲で入力してください。"); 50 51 System.out.print("算数:"); 52 Integer inParam3 = Integer.valueOf(bufReader.readLine()); 53 System.out.print("理科:"); 54 Integer inParam4 = Integer.valueOf(bufReader.readLine()); 55 System.out.print("社会:"); 56 Integer inParam5 = Integer.valueOf(bufReader.readLine()); 57 recordMap.put("国語", inParam2); 58 recordMap.put("算数", inParam3); 59 recordMap.put("理科", inParam4); 60 recordMap.put("社会", inParam5); 61 // recordMap をPersonオブジェクトに代入する。 62 person[i].recordMap = recordMap; 63 64 } 65 System.out.println(); 66 System.out.println("====== 合 計 点 一 覧 ====="); 67 } 68 for (int i = 0; i < kazu; i++) { 69 int sum = person[i].calcSum(); 70 System.out.println("名前:" + person[i].name + ", 合計:" + sum + "点"); 71 } 72 73 } catch (Exception e) { 74 } 75 } 76}

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんなのでいいのでしょうか?

Java

1import java.io.BufferedReader; 2import java.io.InputStreamReader; 3import java.util.HashMap; 4 5class Person { 6 String name; 7 HashMap<String, Integer> recordMap; 8 9 public Person(String name) { this.name = name; } 10 11 public int calcSum() { 12 int kokugo = recordMap.get("国語").intValue(); 13 int sansu = recordMap.get("算数").intValue(); 14 int rika = recordMap.get("理科").intValue(); 15 int syakai = recordMap.get("社会").intValue(); 16 return kokugo + sansu + rika + syakai; 17 } 18} 19 20public class SumScore { 21 public static void main(String[] args) { 22 try (InputStreamReader inStream = new InputStreamReader(System.in); 23 BufferedReader bufReader = new BufferedReader(inStream)) { 24 25 int kazu = 0; 26 while (true) { 27 System.out.print("何人分の成績を入力しますか(数字で入力): "); 28 try { 29 String inParam = bufReader.readLine(); 30 kazu = (int) Integer.parseInt(inParam); 31 if (kazu > 0) break; 32 System.out.println("人数は1以上にしてください。"); 33 } catch (NumberFormatException e) { 34 System.out.println("人数は整数で指定してください。"); 35 } 36 } 37 38 Person person[] = new Person[kazu]; 39 for (int i = 0; i < kazu; i++) { 40 String inName; 41 while (true) { 42 System.out.print((i + 1) + "人目の名前: "); 43 inName = bufReader.readLine(); 44 if (!inName.isEmpty()) break; 45 System.out.println("名前を入力してください。"); 46 } 47 48 person[i] = new Person(inName); 49 HashMap<String, Integer> recordMap = new HashMap<String, Integer>(4); 50 51 recordMap.put("国語", getScore("国語", bufReader)); 52 recordMap.put("算数", getScore("算数", bufReader)); 53 recordMap.put("理科", getScore("理科", bufReader)); 54 recordMap.put("社会", getScore("社会", bufReader)); 55 // recordMap をPersonオブジェクトに代入する。 56 person[i].recordMap = recordMap; 57 System.out.println(); 58 System.out.println("====== 合 計 点 一 覧 ====="); 59 } 60 for (int i = 0; i < kazu; i++) { 61 int sum = person[i].calcSum(); 62 System.out.println("名前:" + person[i].name + ", 合計:" + sum + "点"); 63 } 64 65 } catch (Exception e) { } 66 } 67 68 static Integer getScore(String subject, BufferedReader bufReader) { 69 while (true) { 70 try { 71 System.out.print(subject + ": "); 72 String line = bufReader.readLine(); 73 if (!line.isEmpty()) { 74 try { 75 Integer score = Integer.valueOf(line); 76 if (score >= 0 && score <= 100) return score; 77 System.out.println("得得点は 0~100点の範囲で入力してください。"); 78 } catch (NumberFormatException e) { } 79 } 80 } catch (Exception e) { } 81 System.out.println("得点を入力してください。"); 82 } 83 } 84}

これらのコードは全部理解できますか?
元のコードとどこが異なるかを詳しく説明してください。

投稿2020/07/25 08:02

kazuma-s

総合スコア8224

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

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

0

以下回答者様の定時コードより抜粋

java

1Integer inParam2 = Integer.valueOf(bufReader.readLine()); 2 3if(inParam2.equals("")){ 4 System.out.print("得点を入力してください。"); 5} else if(inParam2 >= 0 && 100 >= inParam2) 6 System.out.print("得得点は 0~100点の範囲で入力してください。");
  1. inParam2はInteger型ですよね?

inParam2.equals("") 数字と空文字を比較してもtrueになることはありません。
2. if(inParam2 >= 0 && 100 >= inParam2)
条件判定が逆です。よくある間違いなので条件を再確認する癖は付けておきましょう。

投稿2020/07/25 07:55

PgMidori

総合スコア184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問