2015-07-28 59 views
2
import java.util.*; 
import java.util.Random; 

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

    ArrayList<Integer> arr = new ArrayList<Integer>(); 

    Random generate = new Random(); 
    for (int nums = 0; nums < 20; nums++) { 
     int randomnumbers = generate.nextInt(50); 
     arr.add(randomnumbers); 
    } 

    System.out.println("First list of 20 generated numbers: "); 
    System.out.println(arr); 
    System.out.println(""); 

    int dupe = 0; 

    for (int n = 0; n < arr.size(); n++) { 
     Integer check1 = arr.get(n); 

     for (int n2 = n+1; n2 < arr.size(); n2++) { 
      Integer check2 = arr.get(n2); 

      //remove second num if two numbers akike 
      if (check1.equals(check2)) { 
       arr.remove(check2); 
       n2 = n2-1; 
       dupe = 1; 

      } 
     } 
     n = n-dupe; 
     dupe = 0; 
    } 

    System.out.println("Duplicates: " + (20 - arr.size())); 

    for (int n3 = arr.size(); n3 < 20; ++n3) { 
     int randomnumbers = generate.nextInt(50); 
     arr.add(randomnumbers); 

     //check for duplicates again 
     for (int n = 0; n < arr.size(); n++) { 
      Integer check1 = arr.get(n); 

      for (int n2 = n+1; n2 < arr.size(); n2++) { 
       Integer check2 = arr.get(n2); 

       if (check1.equals(check2)) { 
        arr.remove(check2); 
        n2 = n2-1; 
        dupe = 1; 
       } 
      } 
      n = n - dupe; 
      dupe = 0; 
     } 
    } 

    //before sort 
    System.out.println(arr); 
    System.out.println(""); 

    for(int a=0; a<20; a++){ 
     for (int b = 0; b < 19; b++) { 
      if(arr[b] > arr[b+1]){ 
       int temporary = arr[b]; 
       arr[b] = arr[b+1]; 
       arr[b+1] = temporary; 
      } 
     } 
    } 

    System.out.println("\nSorted Array:\n"); 
    for (int a = 0; a < 20; a++) { 
     System.out.println("Array [" + a + "]: " + arr[a]); 
    } 


} 

} 

任何人都可以告訴我我爲此做了什麼錯誤,但似乎無法生成最後一部分。不應該ArrayList arr = new ArrayList();運行與arr [b]工作的最後部分相同?我是Java的新手,所以如果簡單的解釋/隱喻是隨解決方案提供的,我將非常感激。ArrayList中的問題<Integer>

P.S:我不打算使用像Collection這樣的庫函數,我需要在最後一部分使用排序方法。

+0

那你究竟由_I意味着不能產生最後PART_? – Codebender

回答

6

arr[a]是訪問數組元素的語法。對於ArrayList,您可以使用arr.get(a)。並且要爲ArrayList分配一個值,則使用arr.set(b,value)。您不能使用賦值運算符。

+0

但它是一個隨機數發生器,我沒有給它設置一個值。它不可能在這裏:https://ideone.com/fEznSZ 我錯過了什麼?或者我的輸入錯誤? – lyj

+0

@lyj'arr [b] = arr [b + 1];'是數組的有效語法,不適用於ArrayLists。使用'arr.set(b,arr.get(b + 1));'代替。 – Eran

+0

還是不能,原諒我的無能。 Ideone沒有成功生成輸出。對不起,我做錯了嗎? https://ideone.com/uZrTdU – lyj

1

您遇到的問題是您正在嘗試在排序前刪除重複項。首先,整理你的整數,重複和全部,然後刪除重複項。

import java.util.ArrayList; 
import java.util.Random; 

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

     ArrayList<Integer> arr = new ArrayList<Integer>(); 

     Random generate = new Random(); 
     for (int nums = 0; nums < 20; nums++) { 
      int randomnumbers = generate.nextInt(10); 
      arr.add(randomnumbers); 
     } 

     System.out.println("First list of 20 generated numbers: "); 
     System.out.println(arr); 
     System.out.println(""); 

     // SORT YOUR LIST FIRST 
     bubbleSort(arr); 
     System.out.println(arr); 

     // NOW YOU CAN REMOVE YOUR DUPLICATES 
     removeDuplicates(arr); 
     System.out.println(arr); 
    } 

    public static void bubbleSort(ArrayList<Integer> list){ 
     for(int i = 0; i < list.size(); i++) { 
      for(int j = 1; j < (list.size() -i); j++) { 
       if(list.get(j - 1) > list.get(j)) { 
        int temp = list.get(j-1); 
        list.set(j-1, list.get(j)); 
        list.set(j, temp); 
       }     
      } 
     }  
    } 

    public static void removeDuplicates(ArrayList<Integer> list){ 
     for(int i = 0; i < list.size(); i++) { 
      if(i < list.size()-1) { 
       int prev = list.get(i); 
       int curr = list.get(i + 1); 

       if(curr == prev) { 
        list.remove(list.get(i + 1)); 
        i--; 
       } 
      } 
     } 
    } 
} 

輸出

First list of 20 generated numbers: 
[9, 2, 2, 1, 3, 4, 0, 9, 5, 2, 5, 7, 4, 9, 0, 4, 0, 6, 6, 6] 

[0, 0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 9, 9, 9] 
[0, 1, 2, 3, 4, 5, 6, 7, 9] 
+0

是的,我正在嘗試整理沒有重複的整數列表。雖然,我沒有使用像Bubble Sort或Make Unique這樣的排序算法排序我正在使用的僅僅是在我的文章中使用代碼段的最後部分來排序它,因爲我並不想學習排序算法,只是想按我的方式排序,但我使用的數組變量顯示錯誤形式。頂級評論者向我展示的可能是這樣,但我不知道如何使用它來使其工作。 – lyj

+0

在甚至試圖編寫任何算法之前,你必須學習數組索引如何工作的基本原理。我想你甚至在知道如何走路之前都想跑步。在嘗試刪除ArrayList中的重複項之前,先退後一步並瞭解索引是如何工作的。使用您的方法刪除重複項是錯誤的。可以先對它進行排序(如我所做的那樣),並正確地遍歷元素或使用現有的集合(如SortedSet)。你的部分教育應該是熟悉現有的Java庫。 – Constantin

+0

就是這樣,我目前的研究不允許使用現有的java庫,但要知道如何對數組進行數學排序。我不允許使用庫排序功能。 – lyj