我的代码中有一个方法可以识别数组中的重复值,但是问题是当我输入3个或更多重复值时,程序将出现错误。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter How many number: ");
int user = input.nextInt();
int array[] = new int[user];
for (int x = 0; x < user; x++) {
System.out.print("Enter number:");
array[x] = input.nextInt();
}
System.out.print("Mode is ");
getMode(array);
}
protected static void getMode(int[] numbers) {
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[i] == numbers[j]) {
System.out.print(numbers[i]);
}
}
}
}
输入多少个数字:5 InputNumber1:1
InputNumber2:1
InputNumber3:1
InputNumber4:2
InputNumber5:2
我希望输出为“模式为12”,但实际输出为“模式为1112”
答案 0 :(得分:0)
您没有将重复项放在某处。如果这样做,您可以按照
的方式检查当前值是否与重复项相同。 if (numbers[i] == numbers[j]) {
if (numbers[i] is not in duplicate list) {
System.out.print(numbers[i]);
addToDupeList(numbers[i];
}
}
我建议使用List
来快速添加并检查重复项,但是由于您使用的是固定数组,因此您需要添加第三个循环,以检查重复项列表中的当前值。
答案 1 :(得分:0)
您应该检查dupeList是否包含要作为参数传递的数字。相反,我建议您使用Set而不是List。
基本上,您可以像这样实现addToDupeSet方法:
private Set<Integer> dupeSet = new HashSet();
private void addToDupeSet(int number){
dupeSet.add(number);
}
那样,dupeSet的值将不会超过一次。
答案 2 :(得分:0)
在您的程序中,您正在重新访问重复的号码。这就是您的程序在模式下提供重复项的原因。 您需要维护一个访问数组,以免再次访问重复的数字。 您需要做的是这样的:
protected static void getMode(int[] numbers) {
boolean[] visited = new boolean[numbers.length];
Integer mode;
for (int i = 0; i < numbers.length; i++) {
if(!visited[i]){
visited[i] = true;
mode = null;
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[i] == numbers[j]) {
visited[j] = true;
mode = numbers[i];
}
}
if(mode != null){
System.out.print(mode);
}
}
}
}
希望这会有所帮助!
答案 3 :(得分:0)
基本上在这里应该这样实现 在getMode()方法中。
Set<Integer> set1 = new HashSet<>();
for (int i = 0; i < num.length; i++) {
set1.add(num[i]);
}
set1.stream().forEach(System.out::print);
答案 4 :(得分:0)
如果我们使用2个for循环再次迭代剩余的数组值,则时间复杂度将为O(n * n),这不是用于大数据的好方法。以下情况将具有O(n)时间复杂度。
protected static void getMode(int[] numbers) {
int[] arr = { 1, 3, 23, 11, 44, 3, 23, 2, 3 };
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < arr.length; i++) {
int count = 1;
if (!(set.add(arr[i]))) {
count++;
map.put(arr[i], count);
}
}
map.forEach((k, v) -> System.out.println(k + " & " + v));
}
`