我有以下代码:
import java.util.Scanner;
public class ArrayDuplicates {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("How many numbers are you going to enter? ");
int num = scan.nextInt();
int[] arr = new int[num]; // initialize array with user inputted length
for (int i = 0; i < arr.length; i++) { // enter numbers into array
arr[i] = scan.nextInt();
}
int[] unique = new int[arr.length]; //initialize new array that will hold unique values
for (int i = 0; i < arr.length; i++) {
boolean b = true; //boolean that checks if an element is a duplicate
for (int j = i+1; j < arr.length; j++) { //check all elements above int i
if (arr[i] == arr[j]) {
b = false; // set b to false if there is an existing duplicate
}
}
if (b) {
unique[i] = arr[i]; // if no duplicates exist, then it is unique.
}
}
for (int i = 0; i < unique.length; i++) {
System.out.println(unique[i]);
}
}
}
这段代码的问题(除了对大型数组来说非常慢,但这不是重点)是由于唯一数组的未声明元素将设置为0,因此第一个数组中的重复元素将被设置为0 unique [](如果有意义的话).我理解为什么会发生这种情况,但无法找到解决此问题的有效方法.我尝试将复制元素设置为唯一数组中的Integer.MIN_VALUE,然后仅打印unique []的元素,这些元素不等于Integer.MIN_VALUE,但这似乎是问题的弱解决方案.我该如何解决这个问题?
编辑:如果我运行代码:
How many numbers are you going to enter? 4
1
2
2
0
输出:
1
0
2
0
由于数组的第二个元素是重复的,我没有将任何值设置为唯一[1],使其默认为0.如何避免打印0,因为它不是原始数组的一部分?
编辑2:是的,这是家庭作业,但我不想使用集合,排序等的原因主要是我不熟悉它们.另外,由于我没有要求任何人为我编写整个程序,我认为可以请求一些帮助.
解决方法:
我将使用你用来解决问题的工具,因为我的一些东西告诉我这是作业…
import java.util.Scanner;
public class ArrayDuplicates
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("How many numbers are you going to enter? ");
int num = scan.nextInt();
int[] arr = new int[num]; // initialize array with user inputted length
for (int i = 0; i < arr.length; i++)// enter numbers into array
{
arr[i] = scan.nextInt();
}
double[] unique = new double[arr.length]; //initialize new array that will hold unique values
///////My edit
for(int z = 0; z < unique.length; z++)
{
unique[z] = -0.5;
}
///////
for (int i = 0; i < arr.length; i++)
{
boolean b = true; //boolean that checks if an element is a duplicate
for (int j = i+1; j < arr.length; j++) //check all elements above int i
{
if (arr[i] == arr[j])
{
b = false; // set b to false if there is an existing duplicate
}
}
if (b)
{
unique[i] = arr[i]; // if no duplicates exist, then it is unique.
}
}
for (int i = 0; i < unique.length; i++)
{
if(!(unique[i] == -0.5))
{
System.out.println((int)(unique[i]));
}
}
}
}
那么,你看到我在哪里注释了我的编辑?这是新事物,一种非常简单的检查方法是给值一个不期望的数字,在这种情况下是一个负数.现在,这是我的一个假设,将-1改为你知道不会输入扫描仪的任何值. if语句也是如此.