Проблема с использованием цикла for

83
14 мая 2021, 03:40

Всем привет! Я только новичок и пытаюсь разобраться с циклом for в Java.

Есть задача:

A bus tour of Europe has been very successful. Due to an increase in the number of people that want to go on a tour, the tour company decided to increase the height of the bus. The new height of the bus is exactly N centimeters.

But the tour’s route runs under a lot of bridges, and there is a chance that the bus will crash into one of these bridges. Can you find out if this will happen?

The first line of the input contains the height of the bus and number of bridges under which the bus passes. The second line contains heights of these bridges.

You should output "Will not crash" if everything will be all right; otherwise, output "Will crash on bridge i" (where i is a number of a bridge) into which the bus will crash. If the height of a bridge equals the height of the bus, the bus will crash.

Sample Input 1:

234 8

465 453 981 463 1235 871 475 981

Sample Output 1:

Will not crash

Sample Input 2:

211 5

871 205 123 871 1681

Sample Output 2:

Will crash on bridge 2

Мой код:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int heightOfTheBus = scanner.nextInt();
        int numberOfTheBridge = scanner.nextInt();
        int heightOfTheBridge;
        int i;
        for (i = 1; i <= numberOfTheBridge; i++) {
            heightOfTheBridge = scanner.nextInt();
            if (heightOfTheBus < heightOfTheBridge) {
                System.out.println("Will not crash");
            } else {
                System.out.println("Will crash on bridge " + i);
            }
        }
    }
}

Проблема заключается в том, что когда я ввожу значение высоты моста, компилятор сразу выводит сообщение попадёт ли автобус в автокатастрофу.
Как сделать, чтобы сообщение об этом выводилось только тогда, как все значения высот уже введены?

Мой output:

Answer 1

Смотрите, вы написали

for (i = 1; i <= numberOfTheBridge; i++) {
    heightOfTheBridge = scanner.nextInt();
    if (heightOfTheBus < heightOfTheBridge) {
        System.out.println("Will not crash");
    } else {
        System.out.println("Will crash on bridge " + i);
    }
}

А ошибка ваша вот в чем: циклы предназначены для повторяющихся действий, а вы поместили в цикл то действие, которое повторяться не должно. Вам нужно сначала обойти мосты, а потом один раз вывести ответ, а не для каждого моста ответ. Вынесите вывод из цикла наружу.

И еще один момент: судя по вашему неравенству, если высота моста больше высоты автобуса, то он в него врежется, а если меньше, то пролезет. Поменяйте знак.

У вас должно быть что-то типа

boolean crash = false;
for (i = 0; i < numberOfTheBridge; i++) {
    heightOfTheBridge = scanner.nextInt();
    if (heightOfTheBus > heightOfTheBridge) {
        crash = true;
        break;
    }
}
if (crash) ... else ... // вывод ответа

Цикл вида for (i = 0, i < n более распространен и привычен глазу программиста, так как он подойдет и для массивов, где индексы начинаются с нуля, и еще много для чего, но это уже совсем другая история.

READ ALSO
Как перехватить исключения метода

Как перехватить исключения метода

Есть метод в кодеОн подключается к базе и заносит туда значения

110
this.ИМЯ_ФУНКЦИИ is not a function

this.ИМЯ_ФУНКЦИИ is not a function

Есть класс, в котором есть 3 функцииДве из них должны возвратить значение

303
Анимация спрайтов не один раз

Анимация спрайтов не один раз

Я хотела сделать так, чтобы вся информация о спрайте хранилась в объекте и функцию отрисовки можно было бы использовать много раз не только...

127
Отрисовка картинок в canvas

Отрисовка картинок в canvas

Я хочу сделать,чтобы функцию draw можно было бы применять много раз с разными картинками, но у меня почему-то не выходитМожет это особенности...

105