java - 尝试打印不重复数字的数组

标签 java arrays unique-values

我有一项编程任务,任务如下:

我采用两个 int 值(x 和 y)并创建两个不同的数组:第一个(大小 x)将打印从 x 开始并递减到 1 的数组。第二个(大小 y)将从第一个数组(大小 x)并将其存储在自己的数组中。然后我将打印出第二个数组。但是,第二个数组不能有任何重复值。例如,如果数组的大小为 10,则它的 10 个单独索引中不能有两个相同的数字。我试图通过创建两个数组来在第二个数组中存储唯一元素,一个 boolean 值用于检查唯一元素,另一个用于存储这些唯一元素。这是我的代码:

/*
* user will enter desired size x for first array labeled arr_1
* arr_1 will contain values descending from x down to 1
* user will enter desired size y for second array labeled arr_2
* arr_2 will contain random values taken from arr_1 w/o repeating numbers
*/

import java.util.Arrays;
// import java.util.Arrays;
import java.util.Random;
// import java.util.Scanner;
public class Prog1B  
{
    public static void main(String[] args)
    {
        System.out.println("Program 1B, Christopher Moussa, masc1574");
        // Scanner scnr = new Scanner(System.in); 
        int x = 20;
        int v = x;
        int[] arr_1 = new int[x];

        for (int i = x-1; i >= 0; i--)
        {
            arr_1[i] = v;   // System.out.print(i+1 + " "); prints 20, 19, ... , 1
            v--;            // System.out.print(arr_1[i] + " "); prints 20, 19, ... , 1
        }
        // int[] b = unique(arr_1);
        System.out.println(Arrays.toString(unique(arr_1)));
    }

    public static int[] unique (int[] n)
    {
        boolean[] seen = new boolean[n.length];
        int[] unique = new int[n.length];
        Random rand = new Random(123L);
        for (int i = 0; i < n.length; i++)
        {
            int index = rand.nextInt(n.length);
            while (seen[index])
            {
                index = rand.nextInt(n.length);
            }
            unique[i] = n[index];
        }
        return unique;
    }



}

代码编译并运行,但它仍然打印出一个包含重复值的数组。我正在尝试编写该程序,以便它不会打印出具有重复值的数组,而仅打印出唯一值。对于问题出在哪里,您有什么建议吗?我很确定它位于“唯一”方法中,更具体地说,当 boolean 数组检查唯一值时(我在尝试调试时注意到,即使它生成的随机索引不是唯一的,它仍然跳过了 while 条件并且打印出来)。我是一名初级程序员(圣地亚哥州立大学学习计算机科学的新生),任何反馈/建议将不胜感激。非常感谢你。

最佳答案

我在你的代码中发现了问题。你永远不会更新你的“看到的” boolean 数组。请参阅下面的代码进行修复:

public static int[] unique (int[] n){
 boolean[] seen = new boolean[n.length];
 int[] unique = new int[n.length];
 Random rand = new Random(123L);
 for (int i = 0; i < n.length; i++)
 {
     int index = rand.nextInt(n.length);
     while (seen[index])
     {
         index = rand.nextInt(n.length);
     }
     seen[index] = true; //boolean array updated
     unique[i] = n[index];
 }
 return unique;

}

使用此修复程序,我可以获得以下输出(没有重复):

[3、11、17、10、16、18、15、6、14、20、7、13、1、19、9、2、5、4、12、8]

关于java - 尝试打印不重复数字的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306484/

相关文章:

java - 如何在列表中获取唯一值

从数据框中删除具有相同值的列

java - PlayDependencyClassLoader 的类路径

java - 根据 HashMap 中的比较值从数组中删除值

C++:如何检查枚举只有唯一值

java - 如何调用 readStudents 方法?

javascript - 在将多个文件上传到服务器之前验证多个文件上传中的单个文件

java - 从 JFileChooser 保存对话框获取用户输入的文件名

java - 从数据库中选择后如何使用mybatis获取结果类型作为列表

Java FIFO队列实现