Java: индекс массива из исключения исключений

System.out.print("Enter an integer: "); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int lArray = x - 2; int[] newArray = new int[lArray]; System.out.println("Let's display all possible integers..."); for (int i = 0; i <= newArray.length; i++) { newArray[i] = i + 2; System.out.print(newArray[i] + " "); } 

Я недавно начал Java, но я уверен, что если бы я закодировал аналогично на другом языке, я столкнулся бы с такой же проблемой. Это выдержка из приложения, в котором перечислены все простые числа до ввода пользователя.

Причина, по которой x-2 используется как определение lArray, заключается в том, что длина массива будет целыми числами от 2 до числа {2, 3, 4, 5 … x}.

Я заметил, что для линии

 for (int i = 0; i <= newArray.length; i++) { 

если я изменил i <= newArray на i < newArray , код работает без ошибок. Тем не менее, вход пользователя, x, оставлен, что является проблемой, если x является простым.

Вы должны использовать < а не <= in:

 for (int i = 0; i <= newArray.length; i++) ^^ 

Если foo любой массив, действительный индекс foo - [0,foo.length-1]

Использование foo.length в качестве индекса приведет к ArrayIndexOutofBoundsException .

А также lArray который содержит число натуральных чисел <=x но исключая только одно число 1 , его значение должно быть x-1 а не x-2 .

Измените длину массива на (x - 1) и перейдите с условием < , которое вы уже нашли, чтобы избежать исключения из-за границ.

Причина, по которой вам нужен массив, который на 1 элемент больше, чем вы сейчас используете, состоит в том, что есть (n - 1) кандидатов, которые должны рассматриваться между 2 и n, а не (n - 2) .

Например, есть два кандидата меньше или равны трем (2 и 3), оба из которых, по совпадению, кажутся первыми.

 for (int i = 0; i <= newArray.length; i++) //should be <, not <= for (int i = 0; i < newArray.length; i++) 

Вам необходимо использовать:

 int lArray = x - 1; 

И измените свое условие на использование < вместо <= .

В Java, как и в C / C ++, массивы основаны на ZERO. Таким образом, ваш массив из N значений будет идти от индекса 0 до N-1 .

Взяв ваш пример: {2, 3, 4, 5... x} .

Вам понадобятся значения N-1 для хранения всех положительных чисел, но 1 в целочисленном массиве. Итак, если N равно 4 , ваш массив будет:

 newArray[0] = 2; newArray[1] = 3; newArray[2] = 4; 

Следовательно, длина массива должна быть 3 ( N-1 ).

  • Firebase DatabaseException: Не удалось преобразовать значение типа java.lang.Long в String
  • Как читать / писать строки из файла на Android
  • java.lang.ClassNotFoundException: Не нашел class на пути: dexpathlist
  • Как Java реализует объединение строк?
  • FileUriExposedException в Android
  • Как вернуть логическое значение из AsyncTask?
  • Время соединения истекло. Зачем?
  • Есть ли способ автоматически генерировать геттеры и сеттеры в Eclipse?
  • Как выполнить итерацию свойств id classа R.java?
  • Java читает файл в ArrayList?
  • Как запустить одновременно два метода
  • Давайте будем гением компьютера.