2014-03-01 197 views
1

我想完成我的任務,但我不知道如何完成它。 我在我的代碼中有3個數組,每個數組都有名字和姓氏(姓氏出現在數組中的第一個名字之前)。合併和排序字符串數組

我應該使用哪個函數來判斷一個字符串是否在另一個之前? 我在想比較,但我不太清楚如何實現它。

這是我到目前爲止的代碼:

public static void main(String[] args) 
{ 

    String[] section1 = {"Curie, Marie", "Feynman, Richard", "Germain, Sophie", 
      "Turing, Alan"}; 
    String[] section2 = {"Bolt, Usain", "Graf, Steffi","Hamm, Mia"}; 
    String[] section3 = {"Bach, Johann Sebastian", "Beethoven, Ludwig van", 
      "Mozart, Wolfgang Amadeus", "Schumann, Clara"}; 

    String[] merged = mergeSortedArrays(section1, section2); 
    String[] merged = mergeSortedArrays(merged, section3); 

    for(int i = 0; i < merged.length(); i ++) 
     System.out.print(merged[i]); 



    } 


//Do not change the method header 
public static String[] mergeSortedArrays(String[] a1, String[] a2) 
{ 

    int i = 0, j = 0, k = 0; 
    while(a1[i] != null && a2[j] != null) 
    { 
     if(a1[i] "comes before" a2[j]) 
     { 
      merged[k] = a1[i]; 
      i++; 
      else { 
       merged[k] = a2[j]; 
       j++; 
      } 
      k++; 
     } 
     return merged; 



    } 

} 

回答

1

若要比較兩個字符串,請使用

if(a1[i].compareTo(a2[j]) <= 0) { //Means: a1[i] <= a2[j]  
    System.out.println("a1[" + i + "] (" + a1[i] + ") is less-than-or-equal-to a2[" + i + "] (" + a2[i] + ")); 
} 

或者

if(a1[i].compareTo(a2[j]) < 0) { //Means: a1[i] < a2[j]  
    System.out.println("a1[" + i + "] (" + a1[i] + ") is less than a2[" + i + "] (" + a2[i] + ")); 
} 

我建議的意見,因爲我已經做了,因爲我發現看着compareTo函數非常混亂。我必須不斷提醒自己,該運營商對compareTo「適當」。我總是評論它是這樣的。

我注意到你的代碼一些嚴重的問題,無關的字符串比較:

  • 你的人有沒有密切的花括號之前。
  • 對象merged從未在mergeSortedArrays功能
  • while循環需要檢查給出的陣列中的數組索引都不會太高聲明,否則你會得到一個ArrayIndexOutOfBoundsException
  • anArray.length()不正確。消除括號。
+0

太好了,非常感謝。解決了我的問題。 – broomhead0

+0

不客氣。歡迎來到stackoverflow! :) – aliteralmind