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

使用冒泡排序,但不是比较ints,而是比较String长度。

我不会为你写代码。您将不得不对此算法进行一些研究。作为程序员,谷歌是你最好的朋友。

祝你好运。

参考:

于 2013-10-06T20:51:06.590 回答
2

如果你真的想学习 Java:使用 Comparator。任何其他方式都是糟糕的 Java 代码。

但是,您可以根据需要重写 Comparator 系统,它会教您正确的代码结构。

对于您的实际代码,这里有一些提示:

  • 使用正确的算法比您用于编码的语言重要得多。好的算法总是一样的,不管是什么语言。

  • 切勿在循环中执行 new,除非您确实需要创建新对象。GC 说“谢谢”。

  • 更改 compareArrayElements 函数以接受最小大小并让它返回具有至少最小大小的最小字符串。

  • 您可以删除那些您认为是最小的字符串(将它们设置为空),但这会修改​​原始数组。
于 2013-10-06T20:58:31.030 回答
0

实施bubbleSort()swap()。我的实现改变了原始数组,但如果需要,您可以修改它们以制作副本。

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

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

    }

    // Mutates the original array
    public static void bubbleSort(String[] arr) {
        boolean swapped = false;
        do {
            swapped = false;
            for (int i = 0; i < arr.length - 1; i += 1) {
                if (arr[i].length() > arr[i + 1].length()) {
                    swap(arr, i, i + 1);
                    swapped = true;
                }
            }
        } while (swapped);
    }

    // Mutates the original array
    public static void swap(String[] arr, int index0, int index1) {
        String temp = arr[index0];
        arr[index0] = arr[index1];
        arr[index1] = temp;
    }
}
于 2013-10-06T21:09:27.827 回答
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接口的默认排序方法实现的

于 2018-11-16T13:57:10.287 回答
0

让我们采用以下字符串数组 inputArray = ["abc","","aaa","a","zz"]

我们可以使用 Comparator 对给定的字符串数组进行排序,以根据长度对其进行排序,代码如下:

String[] sortByLength(String[] inputArray) {
        Arrays.sort(inputArray, new Comparator<String>(){
            public int compare(String s1, String s2){
                return s1.length() - s2.length();
            }
        });
        return inputArray;
    }
于 2018-11-13T05:14:41.607 回答
0

好的,有完全基于循环和冒泡排序的代码。没有你想要的套装。这是一个纯循环程序,因此您可以理解嵌套循环,而且它不会更改索引或字符串的某些内容

      import java.util.*;

    class strings {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    ArrayList<String> a = new ArrayList<String>(2);
    System.out.println("Start entering your words or sentences.");
    System.out.println("Type stop to stop.");
    String b;
    int c = 0, d;

    do {
        b = in.nextLine();
        b = b.trim();
        a.add(b);
        c++;
    }
    while (!b.equalsIgnoreCase("stop"));
    if (c > 1)
        a.remove(a.size() - 1);


    System.out.println("Choose the sort you want. Type the corresponding 
    number");
    System.out.println("1. Ascending");
    System.out.println("2. Descending");
    int sc=in.nextInt();
    switch(sc) {

        case 1: {
            int sag[] = new int[a.size()];

            for (int jk = 0; jk < a.size(); jk++) {
                b = a.get(jk);
                c = b.length();
                sag[jk] = c;
            }
            int temp;
            for (int i = 0; i < a.size() - 1; i++) {
                for (int j = 0; j < a.size() - 1; j++) {
                    if (sag[j] > sag[j + 1]) {
                        temp = sag[j + 1];
                        sag[j + 1] = sag[j];
                        sag[j] = temp;
                    }
                }
            }
            ArrayList saga = new ArrayList();
            for (int i = 0; i < sag.length; i++) {
                saga.add(sag[i]);

            }
            for (int i = 0; i < saga.size(); i++) {

                for (int j = i + 1; j < saga.size(); j++) {
                    if (saga.get(i).equals(saga.get(j))) {
                        saga.remove(j);
                        j--;
                    }
                }

            }


            for (int i = 0; i < saga.size(); i++) {
                for (int j = 0; j < a.size(); j++) {
                    String jl = a.get(j);
                    if (saga.get(i).equals(jl.length()))
                        System.out.println(jl);
                }
            }
            break;
        }
        case 2: {
            int sag[] = new int[a.size()];

            for (int jk = 0; jk < a.size(); jk++) {
                b = a.get(jk);
                c = b.length();
                sag[jk] = c;
            }
            int temp;
            for (int i = 0; i < a.size() - 1; i++) {
                for (int j = 0; j < a.size() - 1; j++) {
                    if (sag[j] < sag[j + 1]) {
                        temp = sag[j + 1];
                        sag[j + 1] = sag[j];
                        sag[j] = temp;
                    }
                }
            }
            ArrayList saga = new ArrayList();
            for (int i = 0; i < sag.length; i++) {
                saga.add(sag[i]);

            }
            for (int i = 0; i < saga.size(); i++) {

                for (int j = i + 1; j < saga.size(); j++) {
                    if (saga.get(i).equals(saga.get(j))) {
                        saga.remove(j);
                        j--;
                    }
                }

            }


            for (int i = 0; i < saga.size(); i++) {
                for (int j = 0; j < a.size(); j++) {
                    String jl = a.get(j);
                    if (saga.get(i).equals(jl.length()))
                        System.out.println(jl);
                }
            }
            break;
        }
    }


}
}
于 2017-05-13T04:58:33.473 回答
-2
import java.util.*;
public class SortStringBasedOnTheirLength {

    public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

      System.out.println("Enter String:");

      String str=sc.nextLine();

      String[] str1=str.split("\\s");

      for(int i=0;i<str1.length;i++)
      {
          for(int j=i+1;j<str1.length;j++)
          {
              if(str1[i].length()>str1[j].length())
              {
                 String temp= str1[i];
                 str1[i]=str1[j];
                 str1[j]=temp;
              }
          }
      }

      for(int i=0;i<str1.length;i++)
      {
         System.out.print(str1[i]+" "); 
      }
    }

}
于 2018-11-26T21:59:49.050 回答