2015-07-28 56 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