初学者在这里。我希望能够向用户提问。如果用户的回答为空或仅包含空格,则应打印出错误,然后返回未回答的问题。因此创建一个循环,直到问题被回答为止。请参见下面的代码:
do {
while(true) {
System.out.print("Dog's name: ");
String dogName = scan.nextLine().toLowerCase().trim();
if(dogName.isEmpty()) {
System.out.println("Error: This can't be empty.");
continue;
}
do {
while(true) {
System.out.print("Breed: ");
String breed = scan.nextLine().toLowerCase().trim();
if(breed.isEmpty()) {
System.out.println("Error: Breed can't be empty.");
continue;
}
此代码有效,但变得非常重复且冗长。有没有更短,更快的方式编写此代码?谢谢。
答案 0 :(得分:5)
这是功能的理想用例。一个函数封装了一段您需要多次的代码,并允许通过参数输入和通过返回类型输出。
我建议阅读有关如何使用函数(如果它们属于某个对象,即不是 static 的Java中的方法)的Java初学者教程。
函数(有时也称为其他语言的过程)是过程编程的基本组成部分,因此,我建议您也了解该主题。 在您的特定情况下,该功能可能如下所示:
String input(String label)
{
System.out.print(label+": ");
String s = scan.nextLine().toLowerCase().trim(); // assuming "scan" is defined in the enclosing class
if(s.isEmpty())
{
System.out.println("Error: "+label+" can't be empty.");
return input(label);
}
return s;
}
这是一个递归函数,但是您也可以迭代执行。
答案 1 :(得分:0)
为将问题作为参数的代码创建一个方法,如果输入错误,则需要问相同的问题,对相同的问题调用相同的方法(递归)。
伪代码::
public void test(String s) {
System.out.print(s + ": ");
String input = scan.nextLine().toLowerCase().trim();
if(dogName.isEmpty()) {
System.out.println("Error: This can't be empty.");
test(s);
} else {
return input;
}
阅读有关recursion的信息。
答案 2 :(得分:0)
您可以尝试这样的操作,这样您可以有许多问题,但是代码数量相同,这只是为了说明这一点,可能无法完全正常工作
String questions[] = {"Dog's name: ","Breed: "};
for (int i = 0; i < questions.length; i++) {
System.out.print(questions[i]);
Scanner scan = new Scanner(System.in);
String answer = null;
while(!(answer = scan.nextLine()).isEmpty()) {
System.out.print("You answered: " + answer + "\n");
}
}
答案 3 :(得分:-1)
您可以这样做:
while ((dogName = scan.nextLine().toLowerCase().trim()).isEmpty()) {
System.out.println("Error: This can't be empty.");
}
// Use dogName not empty
while ((breed = scan.nextLine().toLowerCase().trim()).isEmpty()) {
System.out.println("Error: Breed can't be empty.");
}
// Use breed not empty
最佳