質問: scanner.nextInt(); scanner.close(); // numの値が負の数だった場合の処理 if (num < 0) { System.out.println("不正な点数です。"); } else if (num > 100) { System.out.println("100より小さい点数を入力してください。"); // numの値が80以上100以下の場合の処理 } else if (num >= 80 && num <= 100) { System.out.println("優"); // numの値が70以上80未満の場合の処理 } else if (num >= 70 && num < 80) { System.out.println("良"); // numの値が60以上70未満の場合の処理 } else if (num >= 60 && num < 70) { System.out.println("可"); // numの値が60未満の場合の処理 } else { System.out.println("不可"); } // 整数値以外の値が入力された場合の例外処理 } catch (InputMismatchException e) { System.out.println("点数(整数値)を入力してください。"); } } } ```
回答: オブジェクトを使用した(大袈裟な)...サンプルです. System.in(&Scanner), System.out が 表立って出なくなり, Task04 と Task05 の main メソッドが new TaskXX() 以外同じになりました. 『質問への~依頼』で mts10806 さんの仰られている「やろうとすればどこまでもできる~」の一例といった所でしょうか. ``` package advanced_chapter1; public interface Task { /** * ConsoleManager から必要な値を取り込む. * @param console * @return 正常に読み込めた場合 true. 読み込めなかった場合 false */ boolean read(ConsoleManager console); /** * 処理結果を文字列で返す. * @return 処理結果 */ String getResultString(); /** * 異常が発生した場合のエラーメッセージを返す * @return */ String getErrorMessage(); } ``` ``` package advanced_chapter1; import java.util.InputMismatchException; import java.util.Scanner; class ConsoleManager { private Scanner scanner = null; public ConsoleManager() { // scannerをインスタンス化 scanner = new Scanner(System.in); } public int inputInt(String prompt) throws InputMismatchException { // 文字列(プロンプト)を表示 System.out.print(prompt); // 整数値を読み込んで返す. return scanner.nextInt(); } public void output(String text) { System.out.println(text); } public void error(String errmsg) { System.err.println(errmsg); } public void close() { if(scanner != null) scanner.close(); } } ``` ``` package advanced_chapter1; import java.util.InputMismatchException; public class Task_04 implements Task { public static void main(String[] args) { Task task = new Task_04(); ConsoleManager console = new ConsoleManager(); try { if(task.read(console)) { console.output(task.getResultString()); } else { console.error(task.getErrorMessage()); } } finally { console.close(); } } // 変数の定義 private int num; private String errmsg; /** * InputManager から必要な値を取り込む. * @param inputManager * @return 正常に読み込めた場合 true. 読み込めなかった場合 false */ @Override public boolean read(ConsoleManager console) { try { // 整数値(点数)を読み込む num = console.inputInt("点数:"); return true; // 整数値以外の値が入力された場合の例外処理 } catch (InputMismatchException e) { errmsg = "点数(整数値)を入力してください。"; } return false; } /** * 処理結果を文字列で返す. * @return 処理結果 */ @Override public String getResultString() { // numの値が負の数だった場合の処理 if (num < 0) { return "不正な点数です。"; } else if (num > 100) { return "100より小さい点数を入力してください。"; // numの値が80以上100以下の場合の処理 } else if (num >= 80 && num <= 100) { return "優"; // numの値が70以上80未満の場合の処理 } else if (num >= 70 && num < 80) { return "良"; // numの値が60以上70未満の場合の処理 } else if (num >= 60 && num < 70) { return "可"; // numの値が60未満の場合の処理 } return "不可"; } /** * 異常が発生した場合のエラーメッセージを返す * @return */ @Override public String getErrorMessage() { return errmsg; } } ``` ``` package advanced_chapter1; import java.util.InputMismatchException; public class Task_05 implements Task { public static void main(String[] args) { Task task = new Task_05(); ConsoleManager console = new ConsoleManager(); try { if(task.read(console)) { console.output(task.getResultString()); } else { console.error(task.getErrorMessage()); } } finally { console.close(); } } // 変数の定義 private int a; private int b; private String errmsg; /** * ConsoleManager から必要な値を取り込む. * @param console * @return 正常に読み込めた場合 true. 読み込めなかった場合 false */ @Override public boolean read(ConsoleManager console) { try { // 整数値aを読み込む a = console.inputInt("整数値a:"); // 整数値bを読み込む b = console.inputInt("整数値b:"); return true; // 整数値以外の値が入力された場合の例外処理 } catch (InputMismatchException e) { errmsg = "整数値を入力してください。"; } return false; } /** * 処理結果を文字列で返す. * @return 処理結果 */ @Override public String getResultString() { if (a > b) { return "大きいほうの値は" + a + "です。"; } else if (a < b) { return "大きいほうの値は" + b + "です。"; } return a + "と" + b + "はどちらも同じ値です。"; } /** * 異常が発生した場合のエラーメッセージを返す * @return */ @Override public String getErrorMessage() { return errmsg; } } ```