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

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

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

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

Q&A

解決済

1回答

1277閲覧

removeについて

nejirin_boy

総合スコア21

Java

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

0グッド

0クリップ

投稿2018/01/11 04:52

###前提・実現したいこと
キーボードから月日、予定、優先度を入力して予定表を作っています。
現在登録した予定を削除する機能を実装中に以下のエラーメッセージが発生しました。

わかるかたいらっしゃいましたらご享受ください。

###発生している問題・エラーメッセージ

Exception in thread "main" java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170) at java.io.BufferedInputStream.read(BufferedInputStream.java:336) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:161) at java.io.BufferedReader.readLine(BufferedReader.java:324) at java.io.BufferedReader.readLine(BufferedReader.java:389) at sort17.main(sort17.java:31)

###該当のソースコード

java

1import java.util.List; 2import java.util.ArrayList; 3import java.util.Comparator; 4import java.io.*; 5 6class ToDo { 7 int number; 8 int month; 9 int day; 10 String item; 11 int priority; 12 13 @Override 14 public String toString() { 15 return this.number + "." + this.month + "月" + this.day + "日 " + this.item + "優先度:" + this.priority; 16 } 17} 18 19public class sort17 { 20 public static void main(String[] args) throws IOException { 21 try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 22 23 List<ToDo> ToDoList = new ArrayList<>(); 24 25 while (true) { 26 System.out.println("予定を追加するなら1を入力。"); 27 System.out.println("予定を月順で表示するなら2を入力"); 28 System.out.println("予定を優先度順で表示するなら3を入力"); 29 System.out.println("予定を削除するなら4を入力"); 30 31 String str = br.readLine(); 32 int num = Integer.parseInt(str); 33 34 switch (num) { 35 case 1: 36 ToDo todo = new ToDo(); 37 38 todo.number = ToDoList.size() + 1;//最初の番号が1から増えない 39 40 do { 41 System.out.println("月を入力して下さい(1〜12)"); 42 43 String month = br.readLine(); 44 todo.month = Integer.parseInt(month); 45 46 } while (!(1 <= todo.month && todo.month <= 12)); 47 48 do { 49 System.out.println("日を入力して下さい(1〜31)"); 50 51 String day = br.readLine(); 52 todo.day = Integer.parseInt(day); 53 54 } while (!(1 <= todo.day && todo.day <= 31)); 55 56 System.out.println("予定"); 57 58 String item = br.readLine(); 59 todo.item = item; 60 61 do { 62 System.out.println("優先度を入力して下さい(1〜5)"); 63 64 String priority = br.readLine(); 65 todo.priority = Integer.parseInt(priority); 66 67 } while (!(1 <= todo.priority && todo.priority <= 5)); 68 69 ToDoList.add(todo); 70 71 break; 72 73 case 2: 74 display_month_order(ToDoList); 75 76 break; 77 case 3: 78 display_priority_order(ToDoList); 79 break; 80 case 4: 81 remove_order(ToDoList); 82 break; 83 } 84 } 85 } 86 } 87 88 public static void display_month_order(List<ToDo> ToDoList) { 89 90 System.out.println("=========="); 91 System.out.println("予定です。(月昇順)"); 92 93 ToDoList.sort(new Comparator<ToDo>() { 94 95 @Override 96 public int compare(ToDo todo1, ToDo todo2) { 97 98 int month = Integer.compare(todo1.month, todo2.month); 99 100 if (month == 0) { 101 return Integer.compare(todo1.day, todo2.day); 102 } 103 else { 104 return month; 105 } 106 } 107 }); 108 109 ToDoList.forEach(t -> System.out.println(t)); 110 111 System.out.println("=========="); 112 } 113 114 public static void display_priority_order(List<ToDo> ToDoList) { 115 116 System.out.println("=========="); 117 System.out.println("予定です。(優先度昇順)"); 118 119 ToDoList.sort((a, b) -> a.priority - b.priority); 120 ToDoList.forEach(t -> System.out.println(t)); 121 122 System.out.println("=========="); 123 } 124 public static void remove_order(List<ToDo> ToDoList) throws IOException { 125 try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 126 127 System.out.println("削除したい予定の番号を入力してください。(月順の場合)"); 128 129 ToDoList.sort(new Comparator<ToDo>() { 130 131 @Override 132 public int compare(ToDo todo1, ToDo todo2) { 133 134 int month = Integer.compare(todo1.month, todo2.month); 135 136 if (month == 0) { 137 return Integer.compare(todo1.day, todo2.day); 138 } 139 else { 140 return month; 141 } 142 } 143 }); 144 145 ToDoList.forEach(t -> System.out.println(t)); 146 147 String remove1 = br.readLine(); 148 ToDoList.remove(Integer.parseInt(remove1)-1);//削除できない 149 } 150 } 151} 152

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

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

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

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

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

guest

回答1

0

ベストアンサー

ざっと見たところ、remove_orderでtry-with-resouce構文を使ってSystem.inを使ったStreamをcloseしてしまうからだと思います。

投稿2018/01/11 05:29

masaya_ohashi

総合スコア9206

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

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

nejirin_boy

2018/01/11 10:36

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問