2015-11-04 50 views
-1

即時通訊Java初學者! 我正在解決問題集。這需要4個字符串,並按照字典順序進行排序。我最初使用JAVA Sorting 4字符串按字母順序排列

List<String> strings = new ArrayList<String>(); 

strings.add(first); 
strings.add(second); 
strings.add(third); 

Collections.sort(strings); 

這工作,但我的老師堅持使用條件。 ( 我花了最後2個小時試圖使用compareTo()方法。我的代碼正在編譯,但似乎有一個邏輯錯誤。我希望有人能指出它,並給我一個解釋原因。

此外,我是新來的,我很努力讓自己的代碼容易閱讀,如果有任何提示,請發送給我,另外,如果有任何規則或我沒有做的事情請告訴我。也感謝

編輯:香港專業教育學院一直在努力,並試圖將此代碼粘貼堆棧只是不讓它發生

這是我的要點:https://gist.github.com/mattmccarthy11/b8b5315493fe43efb42c

+2

你真的讓它過於複雜。 –

+0

爲什麼不採取陣列和比較職位? –

+0

我的老師迫使我們使用條件:(:(見後)我最初做了一個數組並對其進行分類,非常令人沮喪,我知道了, – XeXVeX

回答

0
public class LexicographicalOrder { 
     public static void main(String args[]){ 

      String[] mystr = {"Jack","Fortran","Amon","Cpp","Phaser"}; 

      for(int i=0;i<mystr.length-1;i++){ 
       for(int j=i+1 ;j<mystr.length;j++){ 

        if(mystr[i].compareTo(mystr[j]) > 0){ 
         String tmp = mystr[i]; 
         mystr[i]= mystr[j]; 
         mystr[j]=tmp; 
        } 
       } 
      } 

      // print array 
      for(int i=0;i<mystr.length;i++){ 
       System.out.println(mystr[i]); 
      } 

     char[] mychar = {'A','B','C','D','E','F','G','H','I'}; 

     for(int i=0;i<mychar.length;i++){ 
      System.out.println((int)mychar[i]); // print ascii value 
     } 

     } 
} 

//輸出

  • 阿蒙
  • .cpp的
  • 的Fortran
  • 傑克
  • 移相器

這是一個簡單的解決方案,希望這有助於。

+0

非常感謝,就像我在評論中提到的,我最初去循環它,但我的老師迫使我們使用(真的很糟糕,因爲我一直在使用rails 6個月:( – XeXVeX

+0

基本上這個想法是ascii值'A'的ascii值大於'B','0'的ascii值爲48,所以可以與零比較。我已經編輯了答案,請檢查這一點。 –

+0

爲交換價值mystr [i]和mystr [j],這裏是tmp幫助變量 –

0

您正在使用導致組合爆炸的邏輯,即對於添加的每個新字符串,都必須添加許多條件。更好的方法可能如下:

List<String> strings = new ArrayList<String>(); 

strings.add(first); 
strings.add(second); 
strings.add(third); 
    for (int i = 0; i < strings.size(); i++) { 
    int tIndex = i; 
    for (int j = i; j < strings.size(); j++) { 
     if(strings.get(j).compareTo(strings.get(tIndex))<0){ 
      tIndex = j; 
     } 

    } 
    String tString = strings.get(i); 
    strings.set(i, strings.get(tIndex)); 
    strings.set(tIndex, tString); 

}