0

長さに基づいて文字列をソートするための以下のプログラムがあります。最短の要素を最初に印刷したい。これを行うために Comparator や API を使用したくありません。どこが間違っているのですか?

public class SortArrayElements {
    public static void main(String[] args) {
        String[] arr = new String[]{"Fan","dexter","abc","fruit","apple","banana"};
        String[] sortedArr = new String[arr.length];

        for(int i=0;i<sortedArr.length;i++)
        {           
            sortedArr[i] = compareArrayElements(arr);                       
        }

        System.out.println("The strings in the sorted order of length are: ");
        for(String sortedArray:sortedArr)
        {
            System.out.println(sortedArray);
        }
    }

    public static String compareArrayElements(String[] arr) {
        String temp = null;
        for(int i=0;i<arr.length-1;i++)
        {
            temp = new String();
            if(arr[i].length() > arr[i+1].length())
                temp = arr[i+1];
            else
                temp = arr[i];
        }
        return temp;
    }
}

4

8 に答える 8

2

バブルソートを使用しますが、s を比較する代わりにint、単にString長さを比較します。

私はあなたのためにコードを書きません。このアルゴリズムについて少し調べる必要があります。Google は、プログラマーとしてのあなたの親友です。

幸運を。

参考文献:

于 2013-10-06T20:51:06.590 に答える
2

本当に Java を学びたい場合は、コンパレータを使用してください。それ以外の方法は、悪い Java コードです。

ただし、必要に応じて Comparator システムを書き直すこともできます。これにより、適切なコード構造について学ぶことができます。

実際のコードについては、次のヒントを参考にしてください。

  • 適切なアルゴリズムを使用することは、コーディングに使用する言語よりもはるかに重要です。優れたアルゴリズムは、言語に関係なく常に同じです。

  • 実際に新しいオブジェクトを作成する必要がない限り、決して new in ループを実行しないでください。GCは「ありがとう」と言います。

  • 最小サイズを受け入れるように compareArrayElements 関数を変更し、最小サイズ以上の最小の文字列を返すようにします。

  • 最小と見なされた文字列を切り取ることができます (null に設定します) が、元の配列が変更されます。
于 2013-10-06T20:58:31.030 に答える
0
//sort String array based on length 

public class FirstNonRepeatedString {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.println("Please Enter your String");
        String str = in.nextLine();
        String arrString[] = str.split("\\s"); 
        arrString = sortArray(arrString);
        System.out.println("Sort String ");
        for(String s:arrString){
            System.out.println(s);
        }
    }

    private static String[] sortArray(String[] arrString) {
        int length = arrString.length;
            String s;
            for (int i = 0; i < length ; i++) {
                s= new String();

              for(int j = 0; j < length; j++ ){
                  if(arrString[i].length()< arrString[j].length()){
                      s = arrString[i];
                      arrString[i] = arrString[j];
                      arrString[j] = s;
                  }
              }
            }

        return arrString;
    }
}
于 2016-07-24T20:58:18.390 に答える
0

たとえば、次のようになります。

ArrayList<String> str = new ArrayList<>(
Arrays.asList(
"Long", "Short", "VeryLong", "S")
);

ラムダで:

str.sort((String s1, String s2) -> s1.length() - s2.length());

静的 Collections.sort による

 import static java.util.Collections.sort;
    sort(str, new Comparator<String>{
       @Override
         public int compare(String s1, String s2) {
           return s1.lenght() - s2.lenght()
}
});

どちらのオプションも、 Listインターフェースのデフォルトのsortメソッドで実装されています

于 2018-11-16T13:57:10.287 に答える