Java
1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.util.ArrayList; 5 6class ArrayTest 7{ 8 public static void main(String[] args) throws IOException 9 { 10 System.out.println("----------------------------------------------------"); 11 System.out.println("メインメニュー"); 12 System.out.println("1.学生情報新規登録 (*)"); 13 System.out.println("2.学生情報検索 (*)"); 14 System.out.println("3.学生情報削除"); 15 System.out.println("4.学生情報更新"); 16 System.out.println("5.閉じる (*)"); 17 System.out.println("----------------------------------------------------"); 18 19 BufferedReader br = 20 new BufferedReader(new InputStreamReader(System.in)); 21 22 System.out.println("番号を選択してください。"); 23 String str = br.readLine(); 24 int res = Integer.parseInt(str); 25 26 switch(res) { 27 case 1:InputT.input(); 28 main(args); 29 break; 30 case 2:SearchT.search(); 31 main(args); 32 break; 33 case 3:DeleteT.delete(); 34 main(args); 35 break; 36 case 4:/*Updata.updata();*/ 37 main(args); 38 break; 39 case 5: 40 System.out.println("終了します。"); 41 System.exit(0); 42 break; 43 default: 44 System.out.println("入力された番号に該当するメニューがありません。"); 45 main(args); 46 break; 47 } 48 } 49} 50 51//リストの作成 52class SL{ 53 static ArrayList listall; 54 static ArrayList list; 55 56 // 多次元リストの宣言 57 static ArrayList<ArrayList<String>> person = new ArrayList<ArrayList<String>>(); 58 59 public static void create() throws IOException { 60 ArrayList<String> ps = new ArrayList<>(4); 61 String id = "ID"; 62 String name = "NAME"; 63 String birth = "BIRTHDAY"; 64 String adr = "ADDRESS"; 65 66 BufferedReader br = 67 new BufferedReader(new InputStreamReader(System.in)); 68 69 for(int i = 0; i < 1; i++) { 70 System.out.println("IDを入力してください。"); 71 id = br.readLine(); 72 ps.add(id); 73 System.out.println("\n名前を入力してください。"); 74 name = br.readLine(); 75 ps.add(name); 76 System.out.println("\n生年月日を入力してください。(例:XXXX/XX/XX)"); 77 birth = br.readLine(); 78 ps.add(birth); 79 System.out.println("\n住所を入力してください。"); 80 adr = br.readLine(); 81 ps.add(adr); 82 } 83 84 person.add(ps); 85 86 listall = person; 87 list = ps; 88 } 89 90 public ArrayList getlist1() { 91 92 SL sl = new SL(); 93 return sl.listall; 94 } 95 public ArrayList getlist2() { 96 97 SL sl = new SL(); 98 return sl.list; 99 } 100} 101 102//登録 103class InputT{ 104 105 static void input() throws IOException { 106 107 //学生情報 108 System.out.println("\n学生情報の登録をします。"); 109 SL sl = new SL(); 110 111 SL.create(); 112 113 ArrayList listZ = sl.getlist2(); 114 115 System.out.println("\n\n" + listZ); 116 System.out.println("\n" + listZ.get(1) + "さんの情報を登録しました。\n"); 117 118 } 119} 120 121//検索 122class SearchT{ 123 static void search() throws IOException { 124 125 BufferedReader br = 126 new BufferedReader(new InputStreamReader(System.in)); 127 128 SL b = new SL(); 129 ArrayList listX = b.getlist1(); 130 ArrayList listZ = b.getlist2(); 131 132 System.out.println("検索する文字列を選択してください。"); 133 String moji = br.readLine(); 134 135 try{ 136 137 System.out.println(((ArrayList) listX.get(0)).get(1)); 138 System.out.println(moji + "のインデックスは" + listX.indexOf(moji) + "です。"); 139 System.out.println(listX); 140 System.out.println(listZ); 141 System.out.println("要素数 = " + listX.size()); 142 for(Object s:listX) { 143 System.out.println(s); 144 } 145 } 146 catch(java.lang.NullPointerException e){ 147 System.out.println("入力した文字列は登録されていません。"); 148 System.out.println("メニューに戻ります。"); 149 } 150 } 151} 152 153//削除 154class DeleteT{ 155 static void delete() throws IOException { 156 BufferedReader br = 157 new BufferedReader(new InputStreamReader(System.in)); 158 159 SL b = new SL(); 160 ArrayList listX = b.getlist1(); 161 ArrayList listZ = b.getlist2(); 162 163 System.out.println("削除する文字列を選択してください。"); 164 String moji = br.readLine(); 165 166 try{ 167 if (listZ.contains(moji)); 168 listZ.remove(moji); 169 System.out.println(moji + "を削除しました。"); 170 System.out.println(listX); 171 } 172 catch(java.lang.NullPointerException e){ 173 System.out.println("入力した文字列は登録されていません。"); 174 System.out.println("メニューに戻ります。"); 175 } 176 } 177} 178 179/*//更新 180class Updata{ 181 static void updata() throws IOException { 182 183}*/
Javaを勉強中の者です。
上記ソースでキーボードから値を受け入れる形式の多次元リストを制作しているのですが、格納した値を検索または削除する際、あらかじめpersonリストの中に格納しておいた複数のpsリストのインデックスが一部で最後に格納した値の物以外破棄されてしまっているようです。
具体例を挙げますと、あらかじめpsリストに[11,22,33,44]、[55,66,77,88]と値を格納し、それをさらにpersonリストにまとめて格納しています。この時点でpersonリストを出力すると[[11,22,33,44],[55,66,77,88]]となっています。
その後、indexOfで22のインデックスを調べるとperson、psリストのどちらからも-1、つまり格納されていないと返ってきます。しかし、personリストにget(0).get(1)で要素の取得をさせるとちゃんと22が返ってきます。
この場合、古い方([11,22,33,44])のインデックスを保持したままにして検索、削除が出来るようにするにはどこを修正すればよいのでしょうか。アドバイスの方お願い致します。
開発環境:Eclipse 4.7 Oxygen 3a(32bit版 Full Edition)

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/18 08:34