Дорогие программисты. По задумке моей программы пользователь вводит несколько строк, а потом программа их выводит на экран. Загвоздка в том, что я делаю это через 2 кейса. И поскольку значение переменных в каждом кейсе не сохраняется, то я сами переменные закинул в паблик класс, однако при запуске выдает ошибку.
Основной класс:
case 1: //кейс с вводом содержимого n строк
System.out.print("Введите количество строк: ");
if (scanner.hasNextInt()) {
data.n = scanner.nextInt();
} else {
System.out.print("Введены некорректные данные!");
return;
}
scanner.nextLine();
for (int i = 0; i < data.n; i++) {
System.out.printf((i + 1) + " ");
data.strings[i] = scanner.nextLine(); //ругается на ошибку
}
case 2: //кейс с выводом содержимого n строк
for (int i = 0; i < data.n; i++) {
System.out.println(data.strings[i]);
}
break;
Класс с переменными:
public class Data {
int n;
String[] strings = new String[n];
}
Код ошибки: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Заранее спасибо!
Где у вас создается data? Очевидно, что где-то перед вашими кейсами есть строка Data data = new Data(); И тут то и создается объект, в котором инициализируется массив String[] strings = new String[n];. Но поскольку n имеет дефолтное значение (0), то и массив создается нулевой длины. Соответственно, доступ к его элементам получить нельзя, т.к. их там нет. Вам нужно в классе Data написать конструктор, в который передавать n и тут же инициализировать массив стрингов.
Основной класс:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Data data = null;
while (true) {
System.out.println("Input 1 or 2:");
int option = scanner.nextInt();
scanner.nextLine();
switch (option) {
case 1: // кейс с вводом содержимого n строк
System.out.print("Введите количество строк: ");
if (scanner.hasNextInt()) {
data = new Data(scanner.nextInt());
} else {
System.out.print("Введены некорректные данные!");
return;
}
scanner.nextLine();
for (int i = 0; i < data.n; i++) {
System.out.print((i + 1) + " ");
data.strings[i] = scanner.nextLine(); // НЕ ругается на ошибку
}
break;
case 2: //кейс с выводом содержимого n строк
if (data != null) {
for (int i = 0; i < data.n; i++) {
System.out.println(data.strings[i]);
}
}
break;
}
}
}
Класс Data
public class Data {
int n;
String[] strings;
public Data(int n) {
this.n = n;
strings = new String[n];
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости