Дорогие программисты. По задумке моей программы пользователь вводит несколько строк, а потом программа их выводит на экран. Загвоздка в том, что я делаю это через 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];
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нигде не смог найти как при вычитании из одной даты другой получить сколько прошло полных лет, полных месяцев и полных днейПо отдельности...
Всем привет! Есть ли плагин для sublime 3, что бы по выбранному курсором массиву или переменной в которой хранится число, он автоматически выстраивал...
Столкнулся с проблемой, что консоль возвращает разный результат в браузере и REPL