Необходимо запросить ввод с клавиатуры количество людей в команде (от двух до пяти). Потом присвоить каждому из них значение int. Делаю это с помощью простого массива. При введении количества 5, вроде всё работает как надо, но при 2-3-4 выдаётся ошибка:
"
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at com.company.Main.main(Main.java:50)
"
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i;
//Определяем количество газодымозащитников
System.out.print("Введите количество газодымозащитников: ");
i = scan.nextInt();
if (i < 2 || i > 5) {
System.out.println("ВВЕДЕНО НЕВЕРНОЕ ЗНАЧЕНИЕ!!! ВВЕДИТЕ ПРАВИЛЬНОЕ КОЛЛИЧЕСТВО ГАЗОДЫМОЗАЩИТНИКОВ!!! (2 - 5)!!!");
System.exit(0);
}
int[] a = new int[i];
float g1 = a[0]; // Давление при включении первого газодымозащитника
float g2 = a[1]; // Давление при включении второго газодымозащитника
float g3 = a[2]; // Давление при включении третьего газодымозащитника
float g4 = a[3]; // Давление при включении четвёртого газодымозащитника
float g5 = a[4]; // Давление при включении пятого газодымозащитника
//Определяем давление при включении у всех газодымозащитников:
System.out.print("Введите давление при включении первого газодымозащитника: ");
g1 = scan.nextFloat();
System.out.print("Введите давление при включении второго газодымозащитника: ");
g2 = scan.nextFloat();
if (i == 3) {
System.out.print("Введите давление при включении третьего газодымозащитника: ");
g3 = scan.nextFloat();
} else if (i == 4) {
System.out.print("Введите давление при включении третьего газодымозащитника: ");
g3 = scan.nextFloat();
System.out.print("Введите давление при включении четвёртого газодымозащитника: ");
g4 = scan.nextFloat();
} else {
System.out.print("Введите давление при включении третьего газодымозащитника: ");
g3 = scan.nextFloat();
System.out.print("Введите давление при включении четвёртого газодымозащитника: ");
g4 = scan.nextFloat();
System.out.print("Введите давление при включении пятого газодымозащитника: ");
g5 = scan.nextFloat();
}
System.out.println(g1);
System.out.println(g2);
System.out.println(g3);
System.out.println(g4);
System.out.println(g5);
}
}
Алексей
14 уровень
Помогите с массивом.
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
gjkjntyxbr
25 августа 2021, 10:00
Ошибка означает, что ты выходишь за пределы границы массива при инициализации переменных g1-g5.
То есть когда ты пишешь
ты объявляешь массив, размером i. Если введено i = 2, у тебя в массиве a будет только 2 элемента - a[0] и a[1].
А далее
ты объявляешь переменные float g3-g5 и пытаешься им присвоить значения элементов массива a[2], a[3], a[4], которых не существует.
+1
gjkjntyxbr
25 августа 2021, 10:14
Не совсем понятно что тут имеется в виду:
Блок кода:
не имеет смысла.
При объявлении массива int[] a ты просто запросил под него место в памяти, а все его элементы по умолчанию равняются 0. Зачем тебе тут массив, если ты можешь просто написать
+1
Алексей
25 августа 2021, 10:44
С ошибкой понятно.Спасибо большое.Буду разбираться дальше.
0
Алексей
25 августа 2021, 10:47
Они равняются нулю, а значит они есть. А нужно, чтобы их небыло. Т.е. в дальнейшем будут некии вычисления, в которых должны участвовать все элементы(точнее их введённое с клавиатуры число).Например их сравнение и поиск наименьшего. А т.к. они все положительные, а остальные равны нулю, то наименьшими всегда будут нули. В этом и проблема.
0