Java - инициализация массива с указанным пользователем размером
Я пытаюсь создать программу, которая получает размер массива из пользовательского ввода, а затем принимает это количество целых чисел, а затем отображает все простые числа среди них. Так, например, если пользователь вводит, что он хочет, чтобы массив был размером 5, то он должен позволить пользователю ввести 5 целых чисел. Однако я застрял, и это дает мне ошибку.
import java.util.Scanner;
public class arrayprime {
public static void main (String[] Args)
{
boolean isprime = true;
int i=0;
int[] Array = new int[i];
Scanner keyboard = new Scanner (System.in);
System.out.println("Please enter how large you want the array to be: ");
i = keyboard.nextInt();
for (int j=0; j<i; j++)
{
System.out.println("Please enter an integer: ");
Array[j] = keyboard.nextInt();
}
int k = 2;
while (k <= Math.sqrt(Array[i]))
{
if (Array[i] % k == 0)
{
isprime = false;
break;
}
k++;
}
if (isprime==true)
{
System.out.println(Array[i] + "is prime.");
}
}
}
Я получаю ошибку:
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at arrayprime.main(arrayprime.java:18)"
3 ответа
Прочитайте ваш код:
int i=0;
int[] Array = new int[i]; //--> Array = new int[0]
...
while (k <= Math.sqrt(Array[i])) //"i" can be any number, but Array has size 0.
Переехать
i = keyboard.nextInt();
до инициализации Array
Вам нужно перебирать весь массив, когда вы проверяете все простые числа.
Вам также следует инициализировать массив, как только вы узнаете, насколько большим вы хотите его видеть.
Наконец, вам нужно учитывать, что числа меньше 2, а не простые.
Если вы сделаете эти изменения, вы должны получить что-то вроде этого:
import java.util.Scanner;
public class arrayprime {
public static void main (String[] Args)
{
boolean isprime = true;
int i=0;
Scanner keyboard = new Scanner (System.in);
System.out.println("Please enter how large you want the array to be: ");
i = keyboard.nextInt();
int[] Array = new int[i];
keyboard.nextLine();
for (int j=0; j<i; j++)
{
System.out.println("Please enter an integer: ");
Array[j] = keyboard.nextInt();
keyboard.nextLine();
}
for (i = 0; i < Array.length; i++){
int k = 2;
if (Array[i] < 2){
isprime = false;
}
else{
while (k <= Math.sqrt(Array[i]))
{
if (Array[i] % k == 0)
{
isprime = false;
break;
}
k++;
}
}
if (isprime)
{
System.out.println(Array[i] + " is prime.");
}
isprime = true;
}
}
}
Который, я считаю, работает, что вы хотели.
Редактировать: у меня были проблемы с Scanner.nextInt() раньше, потому что он оставлял пустое место в очереди, которое занято на следующем Scanner.next___(), поэтому я склонен избегать его использования. Однако это всего лишь личный вариант.
Надеюсь, это поможет:)
Вот
int i=0;
int[] Array = new int[i];
Вы резервируете хранилище для своего массива, но i
все еще 0
в этот момент.
Таким образом, массив имеет длину 0
и ты
ошибка при попытке добавить к нему элементы.