我遇到的问题是我的程序同时扫描两个不同的输入。
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();
}
}
程序不会等待输入名称,我该如何解决?
答案 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():使此扫描程序超过当前行并返回跳过的输入。