TransWikia.com

Не получается через вывести последовательно данные в консоль на JAVA

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

Ребят, помогите! не могу понять, чего от меня хочет преподаватель в корне. При работе с коллекцией Deque мне нужно вывести на экран этажи, по которым прошёл лифт. Программа работала, но его смутил тот факт, что я использовал for/each, а нужно было прогнать через while на непустоту и выдать красиво данные, посмотрите, пожалуйста, код, важный абзац начинается со второго while – там я и не знаю, как правильно сделать.

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 > 25) {
                System.out.println("Такого этажа нет!");
            } else if (x == 0) {
                System.out.println("Лифт проследовал по следующим этажам:");
                int previousFloor = -1;
                int totalSeconds = 0;
                while (!floors.isEmpty()) {
                    floors.poll();
                    System.out.printf("этаж %d", x); (*вот здесь!)
                    int currentFloor = floors.remove();
                    if (previousFloor != -1) {
                        totalSeconds += Math.abs(currentFloor - previousFloor) * waitMoveInSeconds;
                        totalSeconds += waitDoorsInSeconds;
                    }
                    previousFloor = currentFloor;
                }
                System.out.println("nВремя затраченное лифтом на маршрут: " + totalSeconds + " с.");
                break;
            } else {
                floors.add(x);
                continue;
            }
        }
    }
}

One Answer

Вы используете очередь, а не список, а у очереди метод poll возвращает значение, удаляя его из очереди, посему вызывать метод remove уже не надо.

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

public class Main {

    public static void main(String[] args) {
        
        final int MAX_FLOORS = 25, WAIT_DOORS_SEC = 10, WAIT_MOOVE_SEC = 5;
        int input = -1, previousFloor = 1, totalSeconds = 0;
        
        Scanner scanner = new Scanner(System.in);        
        Deque<Integer> floors = new ArrayDeque<>();
        floors.add(previousFloor);
        System.out.printf("Текущее положение лифта: %d этажn", floors.getFirst());
        
        while (input!=0) {
            System.out.println("Ожидаю ввода этажа: (для завершения введите 0)");
            input = Integer.parseInt(scanner.nextLine());
            if (input > MAX_FLOORS || input < 0) {
                System.out.println("Такого этажа нет!");
                continue;
            }
            if (input == 0) {
                System.out.println("Лифт проследовал по следующим этажам:");                
                while (!floors.isEmpty()) {                
                    int currentFloor = floors.poll();
                    System.out.println("Этаж : " + currentFloor);
                    totalSeconds += Math.abs(currentFloor - previousFloor) * WAIT_MOOVE_SEC + WAIT_DOORS_SEC;
                    previousFloor = currentFloor;
                }
                System.out.println("nВремя затраченное лифтом на маршрут: " + (totalSeconds-WAIT_DOORS_SEC) + " с.");
            } 
            floors.add(input);
        }
    }
}

Answered by Дмитрий on December 18, 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