Нахождение любого дублирующего элемента в массиве

Я пытаюсь найти элемент, который дублируется в массиве. Программа предназначена для ввода данных пользователем.

Вот код:

   package sortingattempt;

import java.util.Scanner;

public class ArraySimilar {

    public static void main(String args[]){
        int[] a = new int[100];
        int[] b = new int[5];
        int Duplicate = 0;

        Scanner sc = new Scanner(System.in);
        System.out.println("Enter size of array");
        int size = sc.nextInt();

        //Scanner elem = new Scanner(System.in);
        System.out.println("Input elements in array" +size);
        for(int j = 0;j<size;j++){
            a[j] = sc.nextInt();
        }
        System.out.println(a.length);
        System.out.println("a[]" + a.toString());

    for (int i = 0; i < a.length;i++){
        b[0] = a[i];
        if (b[0] == a[i+1]){
            Duplicate = b[0];
            System.out.println(Duplicate);
        }
        i++;
        }
        System.out.println("No common variable");

    }

}

Когда я пытаюсь запустить его, он работает правильно до строки, где я прошу пользователя дать ввод. После ввода ввода ничего не происходит. Пожалуйста, укажите ошибки в программе. Спасибо.

2 ответа

Решение

Я думаю, что происходит то, что вам не предлагают ввести число с System.out.println("Enter a number: "); Таким образом, вы думаете, что программа не работает, хотя на самом деле она просто ждет, когда вы продолжите вводить цифры. Вы можете запросить с System.out.println()на каждой итерации:

System.out.println("Input elements in array" +size);
for(int j = 0;j<size;j++){
    System.out.println("Enter a number: ");
    a[j] = sc.nextInt();
}

Кроме того, вы инициализируете свои массивы перед рукой. Разве вы не должны ждать, чтобы получить пользовательский ввод для размера, а затем инициализировать их?

int[] a; 
int[] b;

Scanner sc = new Scanner(System.in);
System.out.println("Enter size of array");
int size = sc.nextInt();

a = new int[size];
b = new int[size];

Кроме того, попытка напечатать a.toString() не даст вам желаемого результата. Вы должны пройти через это или сделать что-то вроде этого

System.out.println("a[] " + Arrays.asList(a));

Изменить: Сравнить

Вы должны просто сделать значения равными в первом цикле

for(int j = 0;j<size;j++){
    System.out.println("Enter a number: ");
    a[j] = sc.nextInt();
    b[j] = a[i];
}

Затем в нижнем цикле сравните во вложенном цикле

int dupCount = 0;
for (int i = 0; i < size; i++){
    for (int j = 0; j < size; j++){
        if (b[i] == a[j]){
            Duplicate = a[j];
            System.out.println(Duplicate);
            dupCount = 0;
        }
    }
}
if (dupCount == 0)
    System.out.println("No common variable");

Другая ошибка заключается в том, что вам нужно удалить i++ из этого блока кода

   Duplicate = b[0];
        System.out.println(Duplicate);
    }
    i++;  //delete that
    }

Также измените это

  System.out.println("Input elements in array" +size);
for(int j = 0;j<size;j++){
    a[j] = sc.nextInt();
}
System.out.println(a.length);
System.out.println("a[]" + a.toString());//change that to a[j] and put it inside the loop. 

Здесь я предполагаю, что вы хотите напечатать элементы вашего массива, поэтому a.toString этого не сделает.

Другие вопросы по тегам