前提
Javaの質問です。
Javaでプログラミングを勉強し始めて3週間と少しのド初心者です。クラスやオブジェクト指向の概念など基本的なことは一通り学んだつもりですが少しでも応用的な内容になるとかなり苦戦してしまいます。
恐縮ですがご助力いただけますと幸いです。
名簿としてID番号、名前、生年月日、性別を記載したテキストファイル(プロジェクト直下に作成)をArrayListに取り込み、ソートしてコンソールに一覧表示するプログラムを書いています(未完)。
ArrayListへのテキストファイルの取り込みと、ソートしないファイルそのままの状態での一覧表示までは試行錯誤の末なんとかできるようになりました。
その次の段階でID、名前、生年月日などでソートし名簿を昇順や降順で表示をさせたいのですが、コンパイルエラーの出ないプログラムがどうしてもうまく書けません。
実現したいこと
・テキストファイルをArrayListへ取り込み、その内容をID、名前、生年月日などでソートしコンソールへ一覧表示させたいです。
・どのようにコードを書き換えれば正常に動作するようになるか知りたいです。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 型 MemberComparator は継承された抽象メソッド Comparator.compare(Object, Object) を実装する必要があります
該当のソースコード
Java
1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileNotFoundException; 4import java.io.FileReader; 5import java.io.IOException; 6import java.util.ArrayList; 7import java.util.Collections; 8 9public class SortTest { 10 11 public ArrayList<SortBean> sortbeanArray = new ArrayList<SortBean>(); 12 13 public static void main(String[] args) { 14 SortTest st = new SortTest(); 15 st.read(); 16 st.show(); 17 } 18 19 public void read() {//ファイルを読み込み、ArrayListの中に入れる 20 21 try { 22 File file = new File("meibo.txt"); 23 24 if (file.exists()) { 25 if (file.isFile() && file.canRead()) { 26 BufferedReader br = new BufferedReader(new FileReader(file)); 27 28 String str; 29 sortbeanArray.clear(); 30 while ((str = br.readLine()) != null) { 31 String[] arr = str.split(",");//カンマで区切って読み込む 32 SortBean bean = new SortBean(); 33 bean.setID(arr[0]); 34 bean.setName(arr[1]); 35 bean.setBirthDay(arr[2]); 36 bean.setGender(arr[3]); 37 sortbeanArray.add(bean); 38 } 39 br.close(); 40 System.out.println("読み込み完了");//成功 41 } else { 42 System.out.println("読み込み不可");//ファイルはあるが読み込めない 43 } 44 } else { 45 System.out.println("ファイルが見つからない");//ファイルがない 46 } 47 48 } catch (FileNotFoundException e) { 49 System.out.println(e); 50 } catch (IOException e) { 51 System.out.println(e); 52 } 53 } 54 55 public void show() {//ArrayListの中に入れたものをソートした上で一覧表示したい 56 57 System.out.println("ソートせずに一覧表示"); 58 for (int i = 0; i < sortbeanArray.size(); i++) { 59 60 System.out.println(sortbeanArray.get(i).getID() 61 + "," + sortbeanArray.get(i).getName() 62 + "," + sortbeanArray.get(i).getBirthDay() 63 + "," + sortbeanArray.get(i).getGender()); 64 } 65 //ここまで、ソートしないままの一覧表示は可能だがここから先がうまくできない 66 System.out.println("IDでソートし一覧表示"); 67 68 for (int i = 0; i < sortbeanArray.size(); i++) { 69 70 Collections.sort(sortbeanArray, new MemberComparator()); 71 72 System.out.println(sortbeanArray.get(i).getID() 73 + "," + sortbeanArray.get(i).getName() 74 + "," + sortbeanArray.get(i).getBirthDay() 75 + "," + sortbeanArray.get(i).getGender()); 76 } 77 78 } 79} 80//--------------------ここから別ファイルにクラスを分けています------------------------- 81import java.util.Comparator; 82 83public class MemberComparator implements Comparator { 84 85 public int compare(SortBean sb1, SortBean sb2) { 86 87 if (sb1.getID() > sb2.getID()) { 88 89 return -1; 90 } else if (sb1.getID() > sb2.getID()) { 91 return 1; 92 } else { 93 return 0; 94 } 95 } 96 97} 98//----------------------ここから別ファイルにクラスを分けています----------------------- 99public class SortBean { 100 101 private String id; 102 private String name; 103 private String birthday; 104 private String gender; 105 106 public SortBean() { 107 } 108 109 public String getID() { 110 return id; 111 } 112 113 public void setID(String id) { 114 this.id = id; 115 } 116 117 public String getName() { 118 return name; 119 } 120 121 public void setName(String name) { 122 this.name = name; 123 } 124 125 public String getBirthDay() { 126 return birthday; 127 } 128 129 public void setBirthDay(String birthday) { 130 this.birthday = birthday; 131 } 132 133 public String getGender() { 134 return gender; 135 } 136 137 public void setGender(String gender) { 138 this.gender = gender; 139 } 140 141} 142//-------サンプルとしてこの下にテキストファイル"meibo.txt"の内容を入れています(ID、名前、生年月日、性別)--------- 143//これらの内容をソートして表示させたい 144/* 145 14657,田中,1999/11/11,Male 14725,山田,1970/03/12,Female 14833,伊藤,1989/05/01,Female 14949,斎藤,2000/01/12,Male 15050,杉山,2010/05/05,Male 15163,河井,1996/01/30,Female 1525,松田,1989/03/21,Male 153 154*/ 155
試したこと
自分で調べCollectionsとComparatorを使用しソートを行う方法にたどり着き(投稿したコードにそのうちの一つを自分が試しているものに書いています)その方法を使いましたがダメでした。
ほかにも書き方の異なる類似の方法を試しましたが同様にうまくできませんでした。
補足情報(FW/ツールのバージョンなど)
Java17を使用しています。
回答2件
あなたの回答
tips
プレビュー