TransWikia.com

Не могу рассчитать время движения лифта в своей программе JAVA

Stack Overflow на русском Asked on December 9, 2021

Кто подскажет, почему не выводится общее количество секунд, потраченное на движение лифта между этажами?

package com.company;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int MAX_FLOORS = 25;
        Deque<Integer> floors = new ArrayDeque<>();
        floors.add(1);
        System.out.printf("Текущее положение лифта: %d этажn", floors.getFirst());
        int waitDoorsInSeconds = 10;
        int waitMoveInSeconds = 5;
        int totalSeconds = 0;
        int previousFloor = -1;
        int currentFloor = 1;

        while (true) {
            System.out.println("Ожидаю ввода этажа: (для завершения введите 0)");
            String input = scanner.nextLine();
            int x = Integer.parseInt(input);
            if (x > 25) {
                System.out.println("Такого этажа нет!");
            } else if (x == 0) {
                System.out.println("Лифт проследовал по следующим этажам:");
                floors.poll();
                System.out.println("Этажи: " + floors);

                if (previousFloor != -1) {
                    totalSeconds += Math.abs(currentFloor - previousFloor) * waitMoveInSeconds;
                    totalSeconds += waitDoorsInSeconds;
                }
                System.out.println("Время затраченное лифтом на маршрут: " + totalSeconds + " с.");
                break;
            } else {
                floors.add(x);
                continue;
            }
        }
    }
}

One Answer

Код:

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int MAX_FLOORS = 25;
        Deque<Integer> floors =
                new ArrayDeque<>();
        floors.add(1);

        System.out.printf("Текущее положение лифта: %d этажn", floors.getFirst());
        int waitDoorsInSeconds = 10;
        int waitMoveInSeconds = 5;

        while (true) {
            System.out.println("Ожидаю ввода этажа: (для завершения введите 0)");
            String input = scanner.nextLine();
            int x = Integer.parseInt(input);
            if (x > MAX_FLOORS) {
                System.out.println("Такого этажа нет!");
            } else if (x == 0) {
                System.out.println("Лифт проследовал по следующим этажам:");
                floors.poll();
                System.out.println("Этажи: " + floors);

                int previousFloor = -1;
                int totalSeconds = 0;
                while (floors.size() > 0) {
                    int currentFloor = floors.remove();
                    if (previousFloor != -1) {
                        totalSeconds += Math.abs(currentFloor - previousFloor) * waitMoveInSeconds;
                        totalSeconds += waitDoorsInSeconds;
                    }
                    previousFloor = currentFloor;
                }
                System.out.println("Время затраченное лифтом на маршрут: " + totalSeconds + " с.");
                break;
            } else {
                floors.add(x);
            }
        }
    }
}

Пример:

Текущее положение лифта: 1 этаж
Ожидаю ввода этажа: (для завершения введите 0)
10
Ожидаю ввода этажа: (для завершения введите 0)
3
Ожидаю ввода этажа: (для завершения введите 0)
15
Ожидаю ввода этажа: (для завершения введите 0)
30
Такого этажа нет!
Ожидаю ввода этажа: (для завершения введите 0)
6
Ожидаю ввода этажа: (для завершения введите 0)
0
Лифт проследовал по следующим этажам:
Этажи: [1, 10, 3, 15, 6]
Время затраченное лифтом на маршрут: 225 с.

Answered by Alexandr on December 9, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP