生徒の情報を管理するプログラムです。
JAVAです。
2次元配列のソートがうまく出来ません。
ローマ字は正しくソートできるのですが、数字がソートできていません。
原因が分かりません。教えてください。
SBDは2番めの要素でcodeです。total pointsは右端の数です。
実行結果
1.Add or 2.edit or 3.delete or 4.see or 5.search or 6.sort please type number 6 How do you sort? 1.SBD or 2.alphabet or 3.total points please type number 3 fghfd 62 ryer ret 63 74 23 160 fdg 34 dgre sdf 123 43 1 167 er 324 fdg ye 32 5 12 49 sgfg 132 rtert ef 12 32 54 98 dedfg 32 fg htdh 43 12 43 98 dedfg 1.Add or 2.edit or 3.delete or 4.see or 5.search or 6.sort please type number 6 How do you sort? 1.SBD or 2.alphabet or 3.total points please type number 2 dedfg 32 fg htdh 43 12 43 98 er 324 fdg ye 32 5 12 49 fdg 34 dgre sdf 123 43 1 167 fghfd 62 ryer ret 63 74 23 160 sgfg 132 rtert ef 12 32 54 98 sgfg 1.Add or 2.edit or 3.delete or 4.see or 5.search or 6.sort please type number
package sort; import java.util.Arrays; import java.util.Comparator; public class takahasi{ public static void main(String[] args){ String[][] namebox;//生徒の名前を入れる場所 String[][] copybox; namebox = new String[0][8]; copybox = new String[0][8]; 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){ copybox = new String[t][8]; System.arraycopy(namebox,0,copybox,0,t); namebox = new String[t+1][8]; System.arraycopy(copybox,0,namebox,0,t); 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==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(); int[][] pointcopy; pointcopy = new int[t][8]; if(sortnumber==1){ comparator.setIndex( 1 ); Arrays.sort( namebox, comparator ); dump( namebox ); } if(sortnumber==2){ comparator.setIndex( 0 ); Arrays.sort( namebox, comparator ); dump( namebox ); } if(sortnumber==3){ comparator.setIndex( 7 ); Arrays.sort( namebox, comparator ); dump( namebox ); } } } } 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 ] ) ); } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/27 03:54
2016/10/27 07:28