我的计时器有什么问题?

时间:2017-01-15 10:50:04

标签: java netbeans timer

好的,所以我用这个计时器脚本完成了一半,但我注意到它运行功能时第二次不再输入任何输入任何想法为什么? 它确实需要所有并等待启动时​​的输入

public class ManagingLifts {


    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Timer timer = new Timer();

        DeliveryMan d = new DeliveryMan();
        Hacker h = new Hacker();
        Lift id = new Lift();
        ArrayList<Person> p = new ArrayList();
        ArrayList<String> who = new ArrayList();



        int MINUTES = 2; // setting the duration of timer for people entering lift



        timer.scheduleAtFixedRate(new TimerTask() // task to be run every 2 minute
        {
    @Override
    public void run()
    {
        int counter = 0;
        int HorD = (int)(Math.random() * 2) + 1; // decides who gets into the lift
        if (HorD <= 1)  // 
        {
            System.out.println("What is your name?");
            String name = sc.nextLine();

            System.out.println("What is your NRIC?");
            String nric = sc.nextLine();

            System.out.println("What is your Country?");
            String country = sc.nextLine();

            System.out.println("What floor do you wan to go?");
            int floor = sc.nextInt();

            if(floor >=50)  //making sure they only go to allowed floors
            {
                System.out.println("You can only access floors 40 - 50!");

            }

           Person list = new Person(name, nric);
           p.add(list);
           h.setCountry(country); 
           who.add("Hacker"); // to have a list of who entered the lift
           counter = +2;

        }

        else if (HorD >= 2)
        {

             System.out.println("What is your name?");
            String name2 = sc.nextLine();

            System.out.println("What is your NRIC?");
            String nric2 = sc.nextLine();

            System.out.println("What type of food are you delivering?");
            String food = sc.nextLine();

            System.out.println("What floor do you want to go?");
            int floor2 = sc.nextInt();

            if(floor2 >=31)
            {
                System.out.println("You can only access floors 2 - 30!");

            }

            Person list2 = new Person(name2, nric2);
            p.add(list2);
            d.setTypeofF(food);
            who.add("DeliveryGuy"); // who entered the lift

            counter = +2;
        }
           if(counter > 200) // stop running lift after 200min
        {
            timer.cancel();
        }


    }


        }, 0, 1000 * 60 * MINUTES); // will run this function every 2min




    }

}

1 个答案:

答案 0 :(得分:0)

当读取楼层编号时,您只读取下一个int,而不是enter以移动到下一行。由于未读取,因此下次循环开始时,name将为空字符串。

所以在阅读地板时添加sc.nextLine(),或者只是读取一个字符串并使用Integer.parseInt将其转换为int。

或者,您也可以通过重新创建System.in来放弃循环之间Scanner的所有输入。而不是在任务之外创建扫描程序,只需在任务运行时创建扫描程序(因此在run方法内)。