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;
}
}
}
}
Вы используете очередь, а не список, а у очереди метод 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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP