Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в работе с массивом

Александр Ребязин Ученик (219), на голосовании 2 месяца назад
Когда ввожу последний переменную в цикле от лица пользователя выдает ошибку, помогите и укажите что надо еще дописать или поменять, заранее спасибо
вот мой код для задания на курсе:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner( System.in );
System.out.print("Введите грузоподьемность автомобиля: ");
int num = scanner.nextInt();
System.out.print("Введите количество грузов: ");
int num2 = scanner.nextInt();
int[] num1 = new int[num2];
for (int i = 1; i <= num1.length; i++) {
System.out.print("Введите массу для груза " + i + ":" );
num1[i] = scanner.nextInt();
}
int res = main1(num1);
if (num < res)
System.out.println("Превышена грузоподьемность автомобиля");
}
public static int main1(int[] num1) {
int sum = 0;
for (int num : num1) {
sum += num;
}
return sum;
}
}
Голосование за лучший ответ
Инспектор Жопидý Просветленный (43418) 3 месяца назад
Ошибка в работе с массивом
В вашем коде есть ошибка при работе с массивом num1. Ошибка возникает, когда вы вводите последний элемент массива.
Причина ошибки:
В цикле for вы используете условие i <= num1.length. Это означает, что цикл будет повторяться, пока i меньше или равно длине массива num1.length. Однако, когда вы вводите последний элемент массива, значение i становится равным num1.length, но вы еще не ввели значение для этого элемента.
Решение:
Чтобы исправить ошибку, нужно изменить условие цикла for на i < num1.length. Это позволит циклу завершиться после того, как вы введете значение для последнего элемента массива.
Исправленный код:
Java
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner( System.in );

System.out.print("Введите грузоподьемность автомобиля: ");
int num = scanner.nextInt();

System.out.print("Введите количество грузов: ");
int num2 = scanner.nextInt();

int[] num1 = new int[num2];

for (int i = 1; i < num1.length; i++) {
System.out.print("Введите массу для груза " + i + ": ");
num1[i] = scanner.nextInt();
}

int res = main1(num1);

if (num < res) {
System.out.println("Превышена грузоподьемность автомобиля");
}
}

public static int main1(int[] num1) {
int sum = 0;
for (int num : num1) {
sum += num;
}
return sum;
}
}
Объяснение:
В исправленном коде мы изменили условие цикла for на i < num1.length. Это означает, что цикл будет повторяться, пока i меньше длины массива num1.length. Когда i станет равным num1.length, цикл завершится.
Другие возможные решения:
• Добавить проверку:
Можно добавить проверку перед тем, как вводить значение для элемента массива.
Java
if (i < num1.length) {
System.out.print("Введите массу для груза " + i + ": ");
num1[i] = scanner.nextInt();
}
• Использовать while цикл:
Можно использовать while цикл вместо for цикла.
Java
int i = 1;
while (i < num1.length) {
System.out.print("Введите массу для груза " + i + ": ");
num1[i] = scanner.nextInt();
i++;
}
Дополнительные советы
• Используйте отладку:
Используйте отладчик, чтобы найти и исправить ошибки в вашем коде.
• Проверьте код на наличие ошибок:
Внимательно проверьте код на наличие ошибок в синтаксисе.
• Используйте форматирование:
Используйте форматирование, чтобы сделать код более читаемым.
Оракул Оракул (61221) 3 месяца назад
Цикл должен быть от нуля до длины массива не включительно
 for (int i = 0; i < num1.length; i++) {  
Александр РебязинУченик (219) 3 месяца назад
спасибо большое, из за такой ерунды сидел полтора часа над кодом и чуть ли с ума не сошел
Похожие вопросы