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