簡體   English   中英

根據長度對數組中的字符串進行排序

[英]Sort strings in an array based on length

我有以下基於長度對字符串進行排序的程序。 我想先打印最短的元素。 我不想使用 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;
    }
}

使用冒泡排序,但不比較int ,只比較String長度。

我不會為你寫代碼。 您將不得不對該算法進行一些研究。 作為程序員,谷歌是你最好的朋友。

祝你好運。

如果你真的想學習 Java:使用比較器。 任何其他方式都是糟糕的 Java 代碼。

但是,您可以根據需要重寫 Comparator 系統,它會教您正確的代碼結構。

對於您的實際代碼,這里有一些提示:

  • 使用正確的算法比用於編碼的語言重要得多。 無論使用何種語言,好的算法總是相同的。

  • 永遠不要在循環中執行 new ,除非您確實需要創建新對象。 GC 說“謝謝”。

  • 更改 compareArrayElements 函數以接受最小大小並讓它返回至少具有最小大小的最小字符串。

  • 您可以刪除您認為最小的那些字符串(將它們設置為 null),但這會修改​​原始數組。

實現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;
    }
}
//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;
    }
}

好的,代碼完全基於循環和冒泡排序。 沒有你想要的套裝。 這是一個純循環程序,因此您可以理解嵌套循環,而且它不會更改索引或字符串的某些內容

      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;
        }
    }


}
}

讓我們采用以下 String 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;
    }

例如,以下內容:

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接口的默認排序方法實現

我們可以簡單地使用下面的代碼。

 String[] sortByLength(String[] inputArray) {
        Arrays.sort(inputArray, Comparator.comparingInt(String::length));
        return inputArray;
    }
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]+" "); 
      }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM