вложенные целые числа циклов, отсутствующие в массиве

Начинающий здесь. У меня возникают проблемы с запуском этой серии циклов, чтобы найти, какие целые числа отсутствуют в массиве.

public class FunWithArrays{
    public static void main(String[] args){
        String nString = args[0];
        int n = Integer.parseInt(nString);
        int inputArray [] = {1,2,4};
        System.out.println(" The missing numbers are " );
        findMissingNum(n, inputArray);
    }
    public static void findMissingNum(int n, int[] inputArray){
        for (int i = 1; i <= inputArray.length; i++){
            int count = 0;
            for( int j = 0; j < n; j++){
                if(inputArray[j] == i){
                    count ++;
                }
                if (count == 0){
                    System.out.println(i);
                }
            }
        }   
    }
}

Я получаю ответ, который я хочу, а именно 3, однако он не печатает, а обнаруживается в ошибке времени выполнения:

java.lang.ArrayIndexOutOfBoundsException: 3
at FunWithArrays.findMissingNum(FunWithArrays.java:17)
at FunWithArrays.main(FunWithArrays.java:9)

метод должен принимать вход n от пользователя (когда программа запускается) как наибольшее значение массива и печатать все те, которые отсутствуют. Логика - это внешний цикл, который должен пересекать массив для чисел 1-n, а внутренний цикл должен добавлять к переменной count каждый раз, когда находит определенное число. В конце итерации он должен напечатать любые цифры с окончательным "счетом" 0. ЭТО ЛИТЕРАТУРНОЕ ДВИЖЕНИЕ МЕНЯ КРАЗИ! заранее спасибо :)

0
22 мая '17 в 23:26
источник поделиться
3 ответа
  1. Прежде всего, вы должны пройти от 0 до (inputArray.length-1) индекса inputArray. Это избавится от исключения ArrayIndexOutOfBoundsException, поскольку индексация массива java начинается с 0, а не 1.

  2. И для внутреннего цикла, от 0 до n, так как n - максимальное число.

  3. И в-третьих, это должно быть inputArray [i] == j, а не inputArray [j] == i, то же самое для печати значения. В вашем случае я считаю, что у вас есть n> = 4, поэтому он пытался получить доступ к inputArray [3] с помощью вызова inputArray [j]. Вот почему вы получаете эту ошибку.

+1
22 мая '17 в 23:37
источник
  1. Приращение i в <= ipnutArray.length не вызывает ошибку, потому что i никогда не используется в качестве индекса. То, что вызывает ошибку, - это когда n > длина.

  2. Кроме того, вы не должны проверять n элементов, начиная с начала, потому что n - максимальное значение, а не количество элементов.

0
22 мая '17 в 23:41
источник

Я думаю, что ваш код означает следующее: цикл гнезда всегда запускается через внутренний цикл, прежде чем запускать внешний цикл.

   public static void findMissingNum(int n, int[] inputArray){
        for (int i = 1; i <= n; i++){
            int count = 0;
            for( int j = 0; j < inputArray.length; j++){
                if(inputArray[j] == i){
                    count ++;
                }
                if (count == 0){
                    System.out.println(i);
                }
            }
        }   
    }

Я просто использую цикл while:

int num =1;
while(num<=n){
    for(int i = 0;i<inputArray.length;i++){
        if(inputArray[i]!=num){
            System.out.println(num);
        }
    }
    num++;
}
0
23 мая '17 в 0:45
источник

Посмотрите другие вопросы по меткам или Задайте вопрос