・当該コードでは1文字の文字列比較ですが、"a","aa","ab","abc"など長さが異なる文字列、1文字以上の文字列を想定していますか?
> string→charに変換し、文字列コードで比較
「文字列コード」とは何でしょうか?
1文字の文字列の比較であれば、「string→charに変換し、(適切に)"文字コード"を比較」でいいですが、適切に文字コードが比較できてない実装上の問題ですね。
以下、問題点を最低限修正した上で、
asc()メソッドの二重for ループ内の 変数i 、 j と 配列変化の推移を表示したものです。
並べ替えの処理で無駄な処理をしていることがわかるでしょうか。
i:0 j:0 b a c
i:0 j:1 b a c
i:0 j:2 b a c -> c a b
i:1 j:0 c a b -> a c b
i:1 j:1 a c b
i:1 j:2 a c b
i:2 j:0 a c b
i:2 j:1 a c b -> a b c
i:2 j:2 a b c
ソートアルゴリズムを学習するか、そうでもなくとも適切な並べ替えの方法がないか考慮すべきです。
・あまり指摘するとデバッグ代行になるので控えたいですが
asc()メソッド内の「return;」はどういう意図で記述したのでしょうか?
sampleクラスの5行目の「 s.getAry();」はどういう意図で記述したのでしょうか?
エラーが起きたときは、ざっくり以下のような流れで対応するものかと思いますがどこまでできていますか?
1)エラーメッセージの意味を把握
2)エラー箇所の特定
3)エラー発生原因の特定
4)原因箇所の修正
5)動作確認
6)エラーが解消されなければ2)に、新たなエラーが出たら1)に戻る
せいぜい1)2)ぐらいしかやってるようには見受けられないので、低評価が付いてるのだと思います。
1classSort{2protectedString[] ary ={"abc","bac","cab","123","231"};34publicintgetIdx(){return ary.length;}56publicString[]getAry(){return ary;}78publicvoidasc(){9for(int i =0; i < ary.length; i++)10for(int j = i+1; j < ary.length; j++){11int k, n = ary[i].length(), m = ary[j].length();12if(n < m) m = n;13for(k =0; k < m && ary[i].charAt(k)== ary[j].charAt(k); k++);14if(k < m ? ary[i].charAt(k)> ary[j].charAt(k): n > m){15String t = ary[i]; ary[i]= ary[j]; ary[j]= t;16}17}18}19}2021classSample{22publicstaticvoidmain(String[] args){23Sort s =newSort();24 s.asc();25for(int i =0; i < s.getIdx(); i++)26System.out.println(s.getAry()[i]);27}28}
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 3
[訳]
mainメソッドにて例外発生っす。
java.lang.StringIndexOutOfBoundsException
ってやつっす。
文字列のインデックス(添え字)が範囲外を指しているっす。3番目っすね…