[英]How can I print out this array method that finds duplicates?
package Practice3;
import java.util.Arrays;
import java.util.Scanner;
public class ray1 {
public static int[] findDuplicates(int[] userInput)
{
for(int i = 0; i< userInput.length; i++)
{
for (int j = i+1; j < userInput.length; j++)
{
if(userInput[i]==(userInput[j]))
{
System.out.println(userInput[i]);
}
}
}
return userInput;
}
public static void main(String[] args)
{
int[] listOfNumbers = { 1, 2, 3, 4, 1, 2, 3, 1 };
int[] x = findDuplicates(listOfNumbers);
Arrays.sort(x);
System.out.println(Arrays.toString(x));
}
}
我认为问题可能出在 static void main 中,但我不太确定代码有什么问题。
你返回你得到的输入,所以你当然不会得到重复。 您应该在函数中创建一个哈希集并将重复项添加到其中。
public static void main(String[] args) {
int[] listOfNumbers = { 1, 2, 3, 4, 1, 2, 3, 1 };
ArrayList<Integer> list = new ArrayList<>(findDuplicates(listOfNumbers));
Collections.sort(list);
System.out.println(list);
}
public static HashSet<Integer> findDuplicates(int[] userInput) {
HashSet<Integer> output = new HashSet<Integer>();
for(int i = 0; i< userInput.length; i++) {
for (int j = i+1; j < userInput.length; j++) {
if(userInput[i]== userInput[j]) {
output.add(userInput[i]);
}
}
}
return output;
}
请注意,我使用返回类型作为 HashSet,它更合适,因为您希望每个重复项出现一次,然后我将其转换为 ArrayList 并打印出来。
根据您的代码, int[] listOfNumbers
和int[] x
是相同的。 您已将int[] listOfNumbers
传递给findDuplicates()
方法,并在不更改任何内容的情况下返回相同的内容。
如果您试图删除该方法中的重复项,那么您需要在循环中执行某些操作,在其中检查value[i] == value[j] where i!=j
。
给您的一个建议是,当value[i] != value[j]
时尝试将数字添加到Collection
,但当它们相似时则不然。
完成后,在两个循环结束时,您将拥有一个带有唯一编号的Collection
。 然后,您将能够进行排序和打印。
注意:这不是最简单或最佳的方法,因为 Java 有一个名为Set
的概念来收集唯一元素。 首先,如果您可以更改您的方法并弄清楚如何获得这两个循环以满足要求,那就太好了。
我建议首先修复findDuplicates
方法来做它应该做的事情。 我的理解是它应该返回一个数组,其中包含在userInput
数组中出现多次的值。
一种方法可能是在findDuplicates
方法的开头创建一个新数组,并将其命名为例如duplicatedValues
。 然后,您可以使用其余方法逻辑标识为重复的值填充它。 鉴于你的语句在你的意见之一是,输出应为[ 1, 2, 3 ]
我想你也应该改变if
声明只接受已经不是价值观duplicatedValues
阵列,这甚至可能意味着3 for
环形。 否则, duplicatedValues
数组本身也将包含重复项。
当您使用“唯一重复项”填充duplicatedValues
数组时,您可以返回该数组而不是userInput
数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.