しっかりと動きはするのですが、値を入力させるメッセージが各メソッドにあるため効率が悪いです。
メソッド化させて保守性のあるプログラムを作成したいのですが、知識不足で大変申し訳ないのですが、どうかお知恵をお貸し頂けますと幸いで御座います。
前提・実現したいこと
<前提>
1:14の数値ごとにadd/substract/multiply/divideをすること・上記以外なら再入力9の整数・全角0~9の数値のみ入力させる
2:一つ目の入力の数値チェック
2-1:マイナスも考慮して0
3:入力された値が5桁かどうかを判定し6桁以上の場合は再入力
4:2つ目の入力でdivideの時には、0を入力された場合再入力をする
5:入力をするところはmethodを作成して共通化をさせる
6:数値チェック・入力された値が5桁かどうの判定もmethodを作成
7:保守性などを意識してロジックを組むこと
8:他に共通できるところは任意のメソッドを作成して共通処理をすること。
<分からないこと>
1:数値チェックをboolean型でした場合、戻り値はtrue or falseなので2つの入力された値をどのように保持していけばいいのか?
2:2つ目の入力された値がdivideの時に0を入力された場合、再入力させ方
3:入力と数値チェックを分割させて処理をするにはどうすればいいのか。。。
4:どこで入力ストリームを閉じれば最適なのか。。。
<実現>
・保守性を考慮した四則演算子を作成
とりあえず、
上記の<分からないこと>を解決して保守性のあるプログラムを作成したい。
該当のソースコード
Java
1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.util.Scanner; 5/** 6 *Create an Aritmetico Programma 7 * 8 * 9 */ 10public class AritmeticoProgramma { 11 static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 12 static Scanner sc = new Scanner(System.in); 13 final static int max = 5;// set 5 of the max digits 14/** 15 * isNum method 16 *check if the numeric value input from keyboard is less than 5 digits 17 * @return a 18 */ 19 public static int isNum() { 20 int a = 0; 21 try { 22 String str; 23 24 while ((str = br.readLine()) != null) { 25 if (!str.isEmpty()) { 26 27 28 29 if (str.length() <= max) { 30 try { 31 a = Integer.valueOf(str); 32 break; 33 } catch (NumberFormatException e) { 34 System.out.println("Please input number"); 35 } 36 37 } else { 38 System.out.println("Please input within 5 digits"); 39 } 40 }else { 41 System.out.println("0~9の整数を入力してください"); 42 } 43 } 44 45 } catch (IOException e) { 46 System.out.println("Arised an IOException"); 47 System.exit(1); 48 } 49 50 return a; 51 52 } 53 54 55 56/** 57 * add method 58 * add the two values and output the result 59 */ 60 public static void add() { 61 System.out.println("Please input the first value"); 62 int num1 = isNum(); 63 System.out.println("Please input the sec value"); 64 int num2 = isNum(); 65 66 int num3 = num1 + num2; 67 System.out.println("Calculation result:" + num1 + "+" + num2 + "=" + num3); 68 } 69 /** 70 * Substract 71 * Minus the two values and output the result 72 */ 73 74 public static void substract() { 75 System.out.println("Please input the first value"); 76 int num1 = isNum(); 77 System.out.println("Please input the sec value"); 78 int num2 = isNum(); 79 int num3 = num1 - num2; 80 System.out.println("Calculation result:" + num1 + "-" + num2 + "=" + num3); 81 } 82/** 83 * multiply 84 * multiply the two values and output the result 85 */ 86 public static void multiply() { 87 System.out.println("Please input the first value"); 88 int num1 = isNum(); 89 System.out.println("Please input the sec value"); 90 int num2 = isNum(); 91 92 int num3 = num1 * num2; 93 System.out.println("Calculation result:" + num1 + "*" + num2 + "=" + num3); 94 } 95/** 96 * divide 97 * divide the two values, extra value and output the results 98 */ 99 public static void divide() { 100 System.out.println("Please input the first value"); 101 int num1 = isNum(); 102 System.out.println("Please input the sec value"); 103 int num2 = isNum(); 104 105 int num3 = num1 / num2 + num1 % num2; 106 System.out.println("Calculation result:" + num1 + "/ " + num2 + " + " + "extra" + "+" + num1 + "%" + num2 + "=" + num3); 107 } 108/** 109 * main 110 * with following the handling number, run each method 111 * 112 * @param args 実行引数 113 */ 114 public static void main(String[] args) { 115 again: while (true) { 116 117 int n; 118 while (true) { 119 System.out.println("Please enter handling-number"); 120 System.out.println("1.add 2.substract 3.multiply 4.devide"); 121 122 n = Integer.parseInt(sc.nextLine()); 123 124 switch (n) { 125 case 1: 126 add(); 127 break; 128 case 2: 129 substract(); 130 break; 131 case 3: 132 multiply(); 133 break; 134 case 4: 135 divide(); 136 break; 137 default: 138 System.out.println("The input value is a wrong"); 139 continue again; 140 } 141 142 back: while (true) { 143 try { 144 int product; 145 System.out.println("1.continue a handling 2.end"); 146 String str; 147 while ((str = br.readLine()) != null) { 148 if (str.isEmpty()) 149 break back; 150 { 151 152 product = Integer.valueOf(str); 153 154 } 155 if (product == 1) { 156 continue again; 157 158 } 159 if (product == 2) { 160 break again; 161 } 162 163 else { 164 System.out.println("The input value is a wrong"); 165 continue back; 166 } 167 } 168 169 } catch (NumberFormatException e) { 170 System.out.println("Please enter a number"); 171 } catch (IOException e) { 172 System.out.println("arised IOException"); 173 174 } 175 } 176 } 177 } 178 } 179} 180
試したこと
知識不足で大変申し訳ないのですが、以下のようなかたちでしてみましたが未完成の状態です。
public void Input() { System.out.println("Please input the first value"); String i; i = sc.nextLine(); AritmeticoProgramma.isNumber(i); } public static boolean isNumber(String num) { try { if (!num.isEmpty()) { if (num.length() <= max) { try { int a = Integer.valueOf(num); return true; } catch (NumberFormatException e) { System.out.println("please enter a number "); } } else { System.out.println("please enter value no more than 5 digits"); } }else { System.out.println("0~9の半角・全角で入力してください。 "); } return false; }
補足情報(FW/ツールのバージョンなど)
Java_version_1.8
Eclipse_version_14
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/25 16:27
退会済みユーザー
2020/05/26 06:13 編集
2020/05/26 06:19 編集