###前提・実現したいこと
Javaで入力した予定を追加・削除するプログラムを作っています。
削除する機能を実装中に問題が発生しました。
118行目のdo-while分の継続条件がうまく反映されません。
自分では予定を削除したいときに追加されている予定の数以外の数字を入力した時に
数字の再入力を求める様にしたいのですが、
予定の数以外の数字を入力すると、プログラムが終了してしまいます。
適用条件を他の変数に変えて試したのですが、うまくいきませんでした。
改善策を享受いただけないでしょうか?
###発生している問題・エラーメッセージ
予定削除の時に予定の数以外の数字を入力すると、以下の内容が表示されます。 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.remove(ArrayList.java:492) at sort24.main(sort24.java:117)
###該当のソースコード
Java
1import java.util.ArrayList; 2import java.util.List; 3import java.io.*; 4import java.util.Comparator; 5 6class ToDo{ 7 int month; 8 int day; 9 String item; 10 int priority; 11} 12 13class sort24 14{ 15 public static void main(String[] args)throws IOException 16 { 17 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 18 19 ArrayList<ToDo> todo = new ArrayList<ToDo>(); 20 21 while(true){ 22 23 System.out.println("予定を追加するなら1を入力。"); 24 System.out.println("予定を月順で表示するなら2を入力"); 25 System.out.println("予定を優先度順で表示するなら3を入力"); 26 System.out.println("予定を削除するなら4を入力"); 27 28 String str = br.readLine(); 29 int num = Integer.parseInt(str); 30 31 ToDo tmp = new ToDo(); 32 33 switch(num){ 34 case 1: 35 36 do{ 37 System.out.println("月を入力して下さい(1〜12)"); 38 39 String month = br.readLine(); 40 tmp.month = Integer.parseInt(month); 41 42 }while(!(1 <= tmp.month && tmp.month <= 12)); 43 44 do{ 45 System.out.println("日を入力して下さい(1〜31)"); 46 47 String day = br.readLine(); 48 tmp.day = Integer.parseInt(day); 49 50 }while(!(1 <= tmp.day && tmp.day <= 31)); 51 52 System.out.println("予定"); 53 54 String item = br.readLine(); 55 tmp.item = item; 56 57 do{ 58 System.out.println("優先度を入力して下さい(1〜5)"); 59 60 String priority = br.readLine(); 61 tmp.priority = Integer.parseInt(priority); 62 63 }while(!(1 <= tmp.priority && tmp.priority <= 5)); 64 65 System.out.println("予定が追加されました。"); 66 67 todo.add(tmp); 68 69 break; 70 71 case 2: 72 System.out.println("予定です。(月昇順)"); 73 74 todo.sort(new Comparator<ToDo>() { 75 76 public int compare(ToDo todo1, ToDo todo2) { 77 78 int month = Integer.compare(todo1.month, todo2.month); 79 80 if (month == 0) { 81 return Integer.compare(todo1.day, todo2.day); 82 } 83 else { 84 return month; 85 } 86 } 87 }); 88 89 System.out.println("=========="); 90 91 for(int i = 0; i < todo.size(); i++){ 92 System.out.println(i + 1 +". "+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 93 } 94 95 System.out.println("=========="); 96 break; 97 98 case 3: 99 System.out.println("予定です。(優先度昇順)"); 100 101 todo.sort((a,b)-> a.priority - b.priority); 102 103 System.out.println("=========="); 104 105 for(int i = 0; i < todo.size(); i++){ 106 System.out.println(i + 1+". "+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 107 } 108 109 System.out.println("=========="); 110 break; 111 112 case 4: 113 System.out.println("削除したい予定の番号を入力して下さい。(月順の場合)"); 114 115 do{ 116 String remove1 = br.readLine(); 117 todo.remove(Integer.parseInt(remove1)-1);//-1する 118 }while(!(1 <= todo.size()));//ここがうまくいかない。 119 120 System.out.println("予定が削除されました。"); 121 122 System.out.println("=========="); 123 124 for(int i = 0; i < todo.size(); i++){ 125 System.out.println(i + 1 +". "+ todo.get(i).month + "月" + todo.get(i).day + "日 " + todo.get(i).item + " 優先度:" + todo.get(i).priority); // 昇順になる 126 } 127 128 System.out.println("=========="); 129 break; 130 } 131 } 132 } 133}
###試したこと
継続条件の変数を色々変えて試しましたが、うまくいきませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/23 04:45