如何在程序执行前让程序等待输入

时间:2018-05-20 09:38:00

标签: java

我遇到的问题是我的程序同时扫描两个不同的输入。

FirebaseFirestore db2 = FirebaseFirestore.getInstance();
            db2.collection("products")
                    .whereEqualTo("cat","fruits")
                    .whereEqualTo("subcat","apple")
                    .whereEqualTo("blocked",false)
                    .whereContains("title","pp")
                    .get()


                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if (task.isSuccessful()) {
                                for(int i=0;i<task.getResult().size();i++){
                                    Product product=task.getResult().getDocuments().get(i).toObject(Product.class);
                                    Log.d(TAG+"2", product.getTitle()+"");
                                }
                                for (QueryDocumentSnapshot document : task.getResult()) {
                                  //  Log.d(TAG+"2", document.getId() + " => " + document.getData());

                                }
                            } else {
                                Log.w(TAG+"2", "Error getting documents.", task.getException());
                            }
                        }
                    });

这是输出:

import java.util.Scanner;

public class Person {

public static void main(String[] args){
Person p1 = new Person();

System.out.println("1: Add Person");
System.out.println("2: Delete Person");
System.out.println();
System.out.print("Please make a selection: ");
Scanner keyboard = new Scanner(System.in);
int selection = keyboard.nextInt();

switch(selection){
    case 1: 
        System.out.print("Please enter name: ");
        String name = keyboard.nextLine();
        p1.addPerson(name);
        break;
    }
}
public Person(){

}

public void addPerson(String name){

    int day, month, year;

    Scanner keyboard = new Scanner(System.in);
    System.out.print("Please enter date of birth in the format dd mm yyyy: ");
    day = keyboard.nextInt();
    month = keyboard.nextInt();
    year = keyboard.nextInt();
}
}

程序不会等待输入名称,我该如何解决?

2 个答案:

答案 0 :(得分:3)

问题是当你nextInt()它扫描一个整数而不是新行字符(\n)时,所以当你拨打nextLine()时它只会消耗\n你在选择时输入并返回空字符串。

修复它的几种方法:

首先在nextLine()之后致电nextInt。要修复您的代码,您可以这样做:

int selection = keyboard.nextInt();
keyboard.nextLine();

第二个选项是调用nextLine(),但需要在Integer.parseInt()中进行int wrap。因此,例如,您的选择将如下所示:

int selection = Integer.parseInt(keyboard.nextLine());

其他选项是使用next()而不是nextLine,但是,如果name包含空格,此方法将不起作用

答案 1 :(得分:2)

您应该使用keyboard.next()

来自java docs:

  

next():从此扫描仪中查找并返回下一个完整的令牌。

这是keyboard.nextLine()的作用:

  

nextLine():使此扫描程序超过当前行并返回跳过的输入。