2013-10-06 4 views
-2

Мне нужна помощь в сортировке этого массива в алфавитном порядке с использованием алгоритма сортировки пузырьков.Java String Bubble Sorting

Мой код:

public class Strings 
{ 
    public static void main(String[] args) 
    { 
     Scanner reader = new Scanner(System.in); 
     String tempStr; 


     System.out.print("Enter the strings > "); 
     String s1 = new String(reader.nextLine()); 

     String[] t1 = s1.split(", "); 

     for (int t=0; t<t1.length-1; t++) 
     { 
      for (int i = 0; i<t1.length -1; i++) 
      { 
       if(t1[i+1].compareTo(t1[1+1])>0) 
       { 
        tempStr = t1[i]; 
        t1[i] = t1[i+1]; 
        t1[i+1] = tempStr; 
       } 
      } 

     } 

     for(int i=0;i<t1.length;i++) 
     { 
      System.out.println(t1[i]); 
     } 
    } 
} 

Код компилируется, но не сортировать в алфавитном порядке. Пожалуйста, помогите мне.

+0

Вы пытаетесь реализовать сортировку пузырьков? Это выглядит подозрительно для меня 't1 [i + 1] .compareTo (t1 [1 + 1])' особенно часть '1 + 1'. Кроме того, убедитесь, что вы используете правильные индексы в массиве в своих циклах. – toniedzwiedz

+0

Я не могу использовать какой-либо метод сортировки. Я должен вручную отсортировать строки по алфавиту. – user2844549

+1

Какой бы тип «ручной» сортировки вы не выбрали, у него есть какое-то имя. Просто прочитайте их. Вероятно, у вас будет либо сортировка пузырьков, либо сортировка вставки. Сорт Bubble не является своего рода «методом сортировки». Вы разобрались, вроде. – toniedzwiedz

ответ

2

У вас есть три ошибки в коде.

Первая ошибка во внутреннем цикле, в том месте, где вы выполняете контрольную инструкцию, должно быть i < t1.length - t -1 не i < t1.length -1. Вы вычитаете t, потому что вы не хотите снова перебирать весь массив, а только первую его часть.

Вторая и третья ошибки содержатся в инструкции if. Вам нужно превратить символ большего, чем символ, чем символ, потому что, как вы настроили метод compareTo, он вернет отрицательное число.

Другая ошибка в этой строке заключается в том, что в параметре compareTo вы помещаете 1 + 1, это на самом деле должно быть только i, потому что вы хотите, чтобы он был меньше, чем объект, который он сравнивает.

Фиксированный рабочий код ниже (Комментарии, что вы изначально были):

public static void main(String[] args) { 
     Scanner reader = new Scanner(System.in); 
     String tempStr; 

     System.out.print("Enter the strings > "); 
     String s1 = new String(reader.nextLine()); 

     String[] t1 = s1.split(", "); 

     for (int t = 0; t < t1.length - 1; t++) { 
      for (int i= 0; i < t1.length - t -1; i++) { 
       if(t1[i+1].compareTo(t1[i])<0) { 
        tempStr = t1[i]; 
        t1[i] = t1[i + 1]; 
        t1[i + 1] = tempStr; 
       } 
      } 
     } 
     for (int i = 0; i < t1.length; i++) { 
      System.out.println(t1[i]); 
     } 
    } 
+1

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

+0

Я попытался объяснить, что он сделал не так с его кодом @DaveNewton. –

0

измените

String[] t1 = s1.split(", "); 

в

String[] t1 = s1.split(""); 

Это позволит решить эту проблему.

+1

Это вздор. Он может решить вашу проблему, потому что ваш ввод был неправильным, но это не значит, что это решит проблему. – Tom