我有一个编程任务,我的任务是:
我正在获取两个 int 值(x 和 y)并创建两个不同的数组:第一个(大小 x)将打印一个从 x 开始并下降到 1 的数组。第二个(大小 y)将从第一个数组中获取随机值(大小 x) 并将其存储在自己的数组中。然后我将打印出第二个数组。但是,第二个数组不能有任何重复值。例如,如果数组大小为 10,则在其 10 个单独的索引中不能有两个相同的数字。我试图通过创建两个数组来将唯一元素存储在我的第二个数组中,一个用于检查唯一元素的布尔值,另一个用于存储这些唯一元素。这是我的代码:
/*
* 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;
}
}
代码编译并运行,但它仍然打印出一个具有重复值的数组。我正在尝试编写程序,以便它不会打印出具有重复值的数组,而只会打印出唯一值。您对问题所在有什么建议吗?我很确定它位于“唯一”方法中,更具体地说,当布尔数组正在检查唯一值时(我在尝试调试时注意到,即使它生成的随机索引不是唯一的,它仍然跳过了 while 条件和打印出来)。我是一名初级程序员(圣地亚哥州立大学学习计算机科学的大一新生),任何反馈/建议将不胜感激。非常感谢你。