###前提・実現したいこと
使用言語はJAVAです。 学生の情報を管理するプログラムを2次元配列で作っています。 ソートできるようにしたいのですが、ComparatorかArraysがうまくいきません。 プログラミング経験はC言語半年、JAVA2日です。
###発生している問題・エラーメッセージ
エラーは出ないのですが、ソートしようとすると強制終了します 注意:takahasi.javaの操作は、未チェックまたは安全ではありません。 注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。 またソートしたときに Exception in thread "main" java.lang.NullPointerException at takahasi$TheComparator.compare(takahasi.java:292) at java.util.TimSort.countRunAndMakeAscending(Unknown Source) at java.util.TimSort.sort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at takahasi.main(takahasi.java:243) のようなエラーが出て強制終了します。
###該当のソースコード
import java.util.Arrays; import java.util.Comparator; public class takahasi{ public static void main(String[] args){ String[][] namebox;//生徒の名前を入れる場所 namebox = new String[100][100]; int t=0;//生徒数 int current=0;//現在注目している生徒 while(true){ if(t>0){ String namec = namebox[current][0]; System.out.println(namec); } System.out.println("1.Add or 2.edit or 3.delete or 4.see or 5.search or 6.sort");//最初の選択 System.out.println("please type number");//数を入力しろ int number = new java.util.Scanner (System.in).nextInt();//数の入力受付 if(number==0){ break; } if(number==1){//生徒の情報を入力 System.out.println("name"); String name = new java.util.Scanner (System.in).nextLine(); namebox[t][0]=name; System.out.println("code"); String code = new java.util.Scanner (System.in).nextLine(); namebox[t][1]=code; System.out.println("address"); String address = new java.util.Scanner (System.in).nextLine(); namebox[t][2]=address; System.out.println("gender"); String gender = new java.util.Scanner (System.in).nextLine(); namebox[t][3]=gender; System.out.println("math"); String math = new java.util.Scanner (System.in).nextLine(); namebox[t][4]=math; System.out.println("phy"); String phy = new java.util.Scanner (System.in).nextLine(); namebox[t][5]=phy; System.out.println("che"); String che = new java.util.Scanner (System.in).nextLine(); namebox[t][6]=che; int maths=Integer.parseInt(math); int phys=Integer.parseInt(phy); int ches=Integer.parseInt(che); int goukei=maths+phys+ches; namebox[t][7]=String.valueOf(goukei); current=t; t++; } if(number==2){//生徒の情報を編集 System.out.println("what do you want to edit?"); System.out.println("1.name or 2.code or 3.address or 4.gender or 5.math or 6.phy or 7.che"); System.out.println("please type number"); int editnumber = new java.util.Scanner (System.in).nextInt(); if(editnumber==1){ String editname = new java.util.Scanner (System.in).nextLine(); namebox[current][0]=editname; } if(editnumber==2){ String editcode = new java.util.Scanner (System.in).nextLine(); namebox[current][1]=editcode; } if(editnumber==3){ String editaddress = new java.util.Scanner (System.in).nextLine(); namebox[current][2]=editaddress; } if(editnumber==4){ String editgender = new java.util.Scanner (System.in).nextLine(); namebox[current][3]=editgender; } if(editnumber==5){ String editmath = new java.util.Scanner (System.in).nextLine(); namebox[current][4]=editmath; } if(editnumber==6){ String editphy = new java.util.Scanner (System.in).nextLine(); namebox[current][5]=editphy; } if(editnumber==7){ String editphy = new java.util.Scanner (System.in).nextLine(); namebox[current][6]=editphy; } if(editnumber>=5){ String mathh=namebox[current][4]; String phyy=namebox[current][5]; String chee=namebox[current][6]; int editmaths=Integer.parseInt(mathh); int editphys=Integer.parseInt(phyy); int editches=Integer.parseInt(chee); int editgoukei=editmaths+editphys+editches; namebox[current][7]=String.valueOf(editgoukei); } } if(number==3){//生徒の情報を削除 for(int y=current;y<t;y++){ namebox[y][0]=namebox[y+1][0]; namebox[y][1]=namebox[y+1][1]; namebox[y][2]=namebox[y+1][2]; namebox[y][3]=namebox[y+1][3]; namebox[y][4]=namebox[y+1][4]; namebox[y][5]=namebox[y+1][5]; namebox[y][6]=namebox[y+1][6]; namebox[y][7]=namebox[y+1][7]; } t--; } if(number==4){//登録されている生徒の情報を表示 for(int see=0;see<t;see++){ String seename = namebox[see][0]; String seecode = namebox[see][1]; String seeaddress = namebox[see][2]; String seejender = namebox[see][3]; String seemath = namebox[see][4]; String seephy = namebox[see][5]; String seeche = namebox[see][6]; String seepoint = namebox[see][7]; System.out.println(seename+seecode+seeaddress+seejender+seemath+seephy+seeche+seepoint); } } if(number==5){//登録されている生徒の情報を検索 System.out.println("Who do you want to search?"); System.out.println("1.totalp or 2.code or 3.name or 4.mathp or 5.phyp or 6.chep"); System.out.println("please type number"); int searchnumber = new java.util.Scanner (System.in).nextInt();//数の入力受付 if(searchnumber==1){//合計得点で検索 System.out.println("please type point");//数を入力しろ String tp = new java.util.Scanner (System.in).nextLine();//数の入力受付 for(int i=0;i<t;i++){ if(namebox[i][7].equals(tp)){ current=i; } } } if(searchnumber==2){//生徒コードで検索 System.out.println("please type code");//数を入力しろ String codes = new java.util.Scanner (System.in).nextLine();//数の入力受付 for(int i=0;i<t;i++){ if(namebox[i][1].equals(codes)){ current=i; } } } if(searchnumber==3){//生徒の名前で検索 System.out.println("please type name");//数を入力しろ String names = new java.util.Scanner (System.in).nextLine();//名前入力受付 for(int i=0;i<t;i++){ if(namebox[i][0].equals(names)){ current=i; } } } if(searchnumber==4){//数学の得点で検索 System.out.println("please type points");//数を入力しろ String mathss = new java.util.Scanner (System.in).nextLine();//名前入力受付 for(int i=0;i<t;i++){ if(namebox[i][4].equals(mathss)){ current=i; } } } if(searchnumber==5){//phyの得点で検索 System.out.println("please type points");//数を入力しろ String physs = new java.util.Scanner (System.in).nextLine();//名前入力受付 for(int i=0;i<t;i++){ if(namebox[i][5].equals(physs)){ current=i; } } } if(searchnumber==6){//cheの得点で検索 System.out.println("please type points");//数を入力しろ String chess = new java.util.Scanner (System.in).nextLine();//名前入力受付 for(int i=0;i<t;i++){ if(namebox[i][6].equals(chess)){ current=i; } } } } if(number==6){//ソートする System.out.println("How do you sort?"); System.out.println("1.SBD or 2.alphabet or 3.total points"); System.out.println("please type number"); int sortnumber = new java.util.Scanner (System.in).nextInt(); TheComparator comparator = new TheComparator(); if(sortnumber==1){ comparator.setIndex( 1 ); Arrays.sort( namebox, comparator ); } if(sortnumber==2){ comparator.setIndex( 0 ); Arrays.sort( namebox, comparator ); } if(sortnumber==3){ comparator.setIndex( 7 ); Arrays.sort( namebox, comparator ); } } } } static public void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } static class MyComparator implements Comparator { public int compare(Object o1,Object o2){ int n1 = o1.toString().length(); int n2 = o2.toString().length(); return n1 < n2 ? -1 : 1; } } static public class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } } }
###試したこと
8時間ぐらい考え続けているのですが、解決策がわかりません。
###補足情報(言語/FW/ツール等のバージョンなど)
jdk1.7.0_79を使っています
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/26 05:44 編集
2016/10/26 06:23
2016/10/26 06:50
2016/10/26 06:56
2016/10/26 07:08
2016/10/26 07:17
2016/10/26 16:12