2013-10-06 3 views
0

У меня есть следующая программа для сортировки строк по длине. Я хочу сначала напечатать самый короткий элемент. Я не хочу использовать Comparator или любой API для этого. Если бы вы могли, пожалуйста, дать мне информацию о том, где я ошибаюсь, я был бы признателен. PS: Пожалуйста, пройдите по вашим комментариям/downvotes, так как я инженер-химик, и я пытаюсь самостоятельно изучить Java. Только уже месяц :)Сортировка строк в массиве на основе длины

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

}

+0

Было бы поучительно для вас реализовать [Quick Sort] (HTTP://en.m.wikipedia.org/wiki/Quicksort). И изучение API * - это изучение языка – Bohemian

+0

Это достойная попытка наивного алгоритма сортировки (Selection Sort), составление сравнений O (n^2). Но вы сравниваете длину соседних элементов массива, никогда не доходя до длины temp. – clwhisk

+0

Также есть такая вещь, как [codereview.stackexchange.com] (http://codereview.stackexchange.com/) – clwhisk

ответ

1

Если вы действительно хотите научиться Java: использовать компаратор. Любой другой способ - это плохой Java-код.

Вы можете, однако, переписать систему компаратора, если хотите, она научит вас правильному структурированию кода.

Для самого кода, вот несколько советов:

  • Использование надлежащего алгоритма является гораздо более важным, чем язык, который используется для кода. Хорошие алгоритмы всегда одинаковы, независимо от языка.

  • Никогда не делайте новые в циклах, если только вам не нужно создавать новые объекты. ГК говорит «спасибо».

  • Измените функцию compareArrayElements, чтобы принять минимальный размер и вернуть наименьшую строку с минимальным размером.

  • Вы можете вырезать те строки, которые вы считаете наименьшими (установите их в null), однако это изменит исходный массив.
2

bubble sort Используйте, но вместо сравнения int с, просто сравнить String длины.

Я не буду писать код для вас. Вам придется немного поработать над этим алгоритмом. Google - ваш лучший друг в качестве программиста.

Удачи.

Ссылки:

+0

Спасибо. Я сделал много исследований, но большинство сообщений в Интернете используют компаратор или API Java. Я не хочу этого. –

+0

@ user2852629 Но у вас появилась идея? Понятно, что вы должны делать? :-) – GGrec

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

// Строка сортировки массива на основе длины

общественного класса 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; 
} 

}

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


} 
} 
Смежные вопросы