Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArrayList中的问题<;整数>; import java.util.*; 导入java.util.Random; 类数组排序{ 公共静态void main(字符串[]args){ ArrayList arr=新的ArrayList(); 随机生成=新随机(); 对于(int nums=0;nums_Java_Arrays_Sorting - Fatal编程技术网

ArrayList中的问题<;整数>; import java.util.*; 导入java.util.Random; 类数组排序{ 公共静态void main(字符串[]args){ ArrayList arr=新的ArrayList(); 随机生成=新随机(); 对于(int nums=0;nums

ArrayList中的问题<;整数>; import java.util.*; 导入java.util.Random; 类数组排序{ 公共静态void main(字符串[]args){ ArrayList arr=新的ArrayList(); 随机生成=新随机(); 对于(int nums=0;nums,java,arrays,sorting,Java,Arrays,Sorting,谁能告诉我这一次我做错了什么,我似乎无法生成最后一部分。ArrayList arr=new ArrayList()不应该吗;运行与arr[b]工作的最后一个部件相同的程序?我是Java新手,如果能提供简单的解释/隐喻,我将不胜感激 注:我不打算使用像Collection这样的库排序功能,我需要在最后一部分使用排序方法 arr[a]是访问数组元素的语法。对于ArrayLists,您使用arr.get(a)。要将值分配给ArrayList,可以使用arr.set(b,value)。您不能使用赋值运算

谁能告诉我这一次我做错了什么,我似乎无法生成最后一部分。ArrayList arr=new ArrayList()不应该吗;运行与arr[b]工作的最后一个部件相同的程序?我是Java新手,如果能提供简单的解释/隐喻,我将不胜感激


注:我不打算使用像Collection这样的库排序功能,我需要在最后一部分使用排序方法

arr[a]
是访问数组元素的语法。对于
ArrayList
s,您使用
arr.get(a)
。要将值分配给
ArrayList
,可以使用
arr.set(b,value)
。您不能使用赋值运算符。

您遇到的问题是,您试图在排序之前删除重复项。首先,对整数、重复项和所有项进行排序,然后删除重复项

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]);
    }


}

}

你说我不能生成最后一部分是什么意思?但这是一个随机数生成器,我没有设置值。这是不可能的:我是不是错过了什么?还是我的输入有误?@lyj
arr[b]=arr[b+1]
是数组的有效语法,而不是ArrayList的有效语法。使用
arr.set(b,arr.get(b+1))arr.set(b,arr.get(b))=arr.set(b,arr.get(b+1))是错误的
arr.set
代替了
=
,而不是附加在它上面。你的意思是去掉那行的=?但当我取出=时,它返回a;作为必需的输入。对不起,我对Java真的很陌生(3天前才开始),我能了解完整的情况吗?是的,我正在尝试对不重复的整数列表进行排序。虽然,我没有使用像冒泡排序或使唯一排序这样的排序算法,但我使用的只是使用我文章中代码段的最后一部分进行排序,因为我还没有尝试学习排序算法,只是想按我的方式进行排序,但我使用的数组变量显示了各种形式的错误。顶级评论者向我展示的可能是一种方法,但我不知道如何使用它来实现它。在尝试编写任何算法之前,你必须学习数组索引工作的基本原理。我想你还没学会走路就想跑。在尝试从ArrayList中删除重复项之前,请后退一步,了解索引是如何工作的。使用您的方法删除重复项是错误的。要么先对它进行排序(正如我所做的那样)并正确地遍历元素,要么使用现有集合,例如完成所有操作的SortedSet。你所受教育的一部分应该是熟悉现有的java库,我目前的研究不允许使用现有的java库,而是要知道如何对数组进行数学排序。我不允许使用库排序函数;这只是我自己实现的冒泡排序。你的意思是说你的老师希望你在不使用任何已知排序算法的情况下对数组进行排序?是的,所以我使用了我想到的一个:D
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]