Лифт: ввод пользователя - PullRequest
       27

Лифт: ввод пользователя

0 голосов
/ 22 февраля 2019

Я пытаюсь сделать приложение, которое копирует работу лифта (2 этажа).Но когда я спрашиваю пользователя, на какой этаж он хочет пойти, есть 2 разных варианта.Первый, пользователь вводит этаж и лифт движется.Второй, через 10 секунд, по-прежнему не отвечает пользователю, в этот момент лифт должен закрыть свою дверь и выключить свет.

Так что моя проблема с тайм-аутом, потому что я хочу, чтобы мой "пока ", чтобы продолжить.

Моя основная:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class TP5 {
  private String floorAsk = "";

  TimerTask task = new TimerTask() {
    public void run() {
      if (floorAsk.equals("")) {
        System.out.println("No response ...");
        task.cancel();
      }
    }    
  };

  public boolean getInput() throws Exception {
    Timer timer = new Timer();
    timer.schedule(task, 10 * 1000);

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    floorAsk = in.readLine();

    timer.cancel();
    System.out.println("Floor ask " + floorAsk);

    return true;
  }


  /**
   * main.
   * @param args ceci est un String[]
   */
  public static void main(String[] args) {
    Controller c = new Controller();
    Door p = new Door();
    Light l = new Light();
    Engine m = new Engine();
    Button b = new CallButton();

    while (true) {
      Scanner sc = new Scanner(System.in);
      System.out.println("What is your floor ?");
      String actualFloorString = sc.nextLine();

      int actualFloor = Integer.parseInt(actualFloorString);

      if (actualFloor == 0 || etageAct == 1) {
        System.out.println("You are at floor " + actualFloorString);
        if (actualFloor != c.getShaft()) {
          if (actualFloor > c.getShaft()) {
            m.up();
          } else if (actualFloor < c.getShaft()) {
            m.down();
          }
        }

        if (!l.isOn()) {
          l.on();
        }

        if (!p.isOpen()) {
          p.open();
        }

        System.out.println("Which floor do you want to go ?");
        try {
          (new TP5()).getInput();
        } catch (Exception e) {
          System.out.println(e);
        }

        System.out.println("test");

      } else {
        System.out.println("Please enter a valid floor (0 or 1)");
      }
    }

  }
}

Я пытаюсь использовать это решение: Ограничение по времени для входа

, но я хочучтобы вернуться в свое «время», и я не знаю, как это сделать или если я использую правильный способ сделать это.

У меня также есть какой-то другой класс, Contoleur, Lumiere, Moteur,Порт, Бутон.Но я еще не кодировал функции.

Спасибо за ваш ответ

РЕДАКТИРОВАТЬ

Хорошо, я могу найти способ, я изменяю свой код, и теперь у меня есть функциякоторый принимает параметр сканер и строку:

public static int ask(Scanner sc, String t) {
    System.out.println(t);

    return sc.nextInt();
}

И мне было интересно, что, возможно, можно установить таймаут для функции.Вы знаете, возможно ли это?

1 Ответ

0 голосов
/ 22 февраля 2019

Я бы предложил использовать класс Timer.https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html

После 10-секундного перерыва таймер должен вызвать метод, который "закрывает" дверь лифта.

Таймер можно отменить, если пользователь введет действительное целое число.Новый таймер может быть создан при открытии двери.

Редактировать: я не видел, чтобы вы уже использовали объект Timer, поскольку я был прокручен до основного метода.

...