2015-11-08 24 views
-4

我必須編寫一個程序,按字母順序排序名稱,同時刪除重複項並計算名稱出現的次數並將其全部大寫。我和我的合作伙伴一直在研究這個問題,並且沒有辦法讓排序方法正常工作,讓程序查找並計算名稱出現的時間。我們必須使用某些方法來做到這一點...我把這個pdf放在底部。我真的很想明白什麼是錯的,爲什麼輸出不正確。我的排序方法和查找/計數方法搞砸了,我不知道什麼是錯的?

public class Names { 

/** 
* @param args the command line arguments 
*/ 
static ArrayList<String> fnArray = new ArrayList<String>(); 
static ArrayList<String> lnArray = new ArrayList<String>(); 

public static void main(String[] args) throws IOException { 
    // TODO code application logic here 

    getNames(fnArray, lnArray); 

    sort(lnArray); 
    find(fnArray,1); 


    capitalize(fnArray,lnArray); 

} 

public static void getNames(ArrayList<String> fn, ArrayList<String> ln) throws IOException { 

    Scanner kb = new Scanner(System.in); 

    System.out.println("What file would you like to read from ?: "); 
    String n = kb.next(); 

    File inputFile = new File(n); 
    Scanner in = new Scanner(inputFile); 

    while (in.hasNext()) { 
     String firstName = in.next(); 
     fn.add(firstName); 
     String lastName = in.next(); 
     ln.add(lastName); 
    } 

    for (int i = 0; i < fnArray.size(); i++) { 
     System.out.println(lnArray.get(i) + " " + fnArray.get(i)); 

    } 

} 

public static void capitalize(ArrayList<String> fnArray, ArrayList<String> lnArray) { 

    String capfn = " "; 
    String capln = " "; 

    int i = 0; 
    int j = 0; 
    System.out.println("****************Names***************"); 
    while (i < fnArray.size() && j < lnArray.size()) { 
     capfn = fnArray.get(i); 
     capln = lnArray.get(j); 
     String capFname = capfn.substring(0, 1).toUpperCase() + capfn.substring(1).toLowerCase(); 
     String capLname = capln.substring(0, 1).toUpperCase() + capln.substring(1).toLowerCase(); 
     fnArray.set(i, capFname); 
     lnArray.set(i, capLname); 
     System.out.println(lnArray.get(j) + ", " + fnArray.get(i)); 
     i++; 
     j++; 
    } 

} 

public static void display(ArrayList<String> names) { 
    for (int i = 0; i < names.size(); i++) { 
     System.out.println(names.get(i)); 
    } 

} 
public static int find(String s, ArrayList<String> a) { 
int count = 0; 
for (String str : a) { 
    if (str.equalsIgnoreCase(s)) 
     count++; 
} 
return count; } 

public static void removeDuplicates(ArrayList<String> s) { 

    for (int j = 0; j < s.size(); j++) { 
     int i = -1; 
     while ((i = find(s, j)) >= 0) { 
      s.remove(i); 
     } 
    } 
} 

public static void backwards(ArrayList<String> names) { 

    for (int i = names.size() - 1; i > 0; i--) { 
     names.get(i); 
     for (int j = 0; j < names.size(); i++) { 
      if ((names.get(i).equals(names.get(j)))) { 
       names.remove(i); 
      } 

     } 

    } 
} 
public static void sort(ArrayList<String> array) { 

    for (int i = 1; i < array.size(); i++) { 

     // find the index of the ith smallest value 
     int s = i - 1; 

     for (int j = i; j < array.size(); j++) { 

      if (array.get(j).compareTo(array.get(s)) < 0) { 

       s = j; 

      } 

     } 

     // swap the ith smallest value into entry i-1 
     String temp = array.get(i - 1); 

     array.set(i - 1, array.get(s)); 

     array.set(s, temp); 


    } 


} 




public static void showUnique(ArrayList<String> names){ 
    System.out.println("Unique name list contains:"); 
    for(int i=0 ;i< names.size() ;i++){ 

     System.out.println(lnArray.get(i) + " " + fnArray.get(i)); 
     } 

    }} 

回答

0

您可以使用Collections.sort()方法對數組列表進行排序;一旦排序,你將有條目是這樣的:

ArrayList = { "Alpha", "Beta", "Beta", "Gamma", "Theta", "Theta" ... } 

重要的一點要注意,然而,就是重複的將是有序陣列中彼此相鄰。

最後,如果你想刪除重複項,你可以把ArrayList的所有元素放到一個Set中:set是一個刪除重複項的數據結構。

實施例:

Set<String> foo = new HashSet<String>(yourArrayList); 

編輯:使用此方法這既是:容易且簡單到領悟。

for(int i = 0; i < array.size() - 1; i++) 
{ 
    for(int j = i + 1; j < array.size(); j++) 
    { 
     if(array[i] > array[j]) 
     { 
      // Swap the contents of array[i] and array[j]. 
     } 
    } 
} 
+0

謝謝你的迴應!問題是我們不能使用任何.sort方法,我們必須在public static void sort(ArrayList 名稱)下使用它,它必須是嵌套循環,它必須引用存儲在文本文件中的數組列表。 –

+0

@AmyTenorio我已經更新了答案,以包含更容易解釋的排序版本。你能試試嗎? – Pavan

相關問題