【问题标题】:How to add multiple user-prompts in while loop?如何在while循环中添加多个用户提示?
【发布时间】:2014-11-28 13:18:09
【问题描述】:

我必须编写一个程序来询问用户的姓名、地址和电话号码。输入数据后,程序将打印数据并要求用户通过输入是或否来验证数据。应重复此过程,直到用户满意并对问题回答是。

现在,此时我可以弹出一个提示(在我的例子中,只询问用户名)。但是如果我想添加多个问题(即询问地址和电话号码)并发生同样的事情怎么办?我怎么能这样做?

我的代码:

    package userinfo;

import java.util.Scanner;
import sun.security.krb5.SCDynamicStoreConfig;

public class UserInfo {

    public static void main(String[] args) {

        String varify;
        String yes = "yes";
        String no = "no";

        Scanner input = new Scanner(System.in);
        System.out.println("Enter your name: ");
        String name = input.next();
        System.out.println("Your input was: "+name);
        System.out.println("Varify by yes or no: ");

        while (true) {
            varify = input.next();

            if (varify.equalsIgnoreCase(yes)) {
                System.out.println("Varified! Your name is: " + name);

            } else if (varify.equalsIgnoreCase(no)) {
                System.out.println("Type your name again: ");

            }

        }

    }

}

【问题讨论】:

    标签: java loops if-statement while-loop user-input


    【解决方案1】:

    您可以将此代码提取到方法中:

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String userName = readFieldAndVerify(input, "Enter your name: ");
        String userAddress = readFieldAndVerify(input, "Enter your address: ");
        String userPhoneNumber = readFieldAndVerify(input, "Enter your phone number: ");
    }
    
    private static String readFieldAndVerify(Scanner input, String prompt) {
        while (true) {
            System.out.print(prompt);
            String field = input.next();
    
            System.out.println("Are you sure (yes / no)?");
            String verify = input.next();
    
            if (verify.equalsIgnoreCase("yes")) {
                System.out.println("Verified!");
                return field;
            } else {
                System.out.println("Canceled");
            }
        }
    }
    

    【讨论】:

    • 比我解决多个问题的方法好得多。假设 OP 只是想要一个简单的例子。
    • alaster,这就是我想要的。迫不及待地想接受你的回答。
    【解决方案2】:

    编辑为更多问题添加了逻辑...以类似的方式扩展它以满足您的所有需求。您也可以将此代码扩展为单个方法,以避免代码复制。以用户alaster 的回答为例。

    试试这个。它将存储name 变量以供您进一步使用。

    我们使用boolean 不断要求用户输入他的姓名,直到他验证为止。

    当然,如果名称有效,您仍然可以使用while(true),然后使用break,但我更喜欢这种方法,因为代码更清晰,更容易理解。

    private static boolean isVerified(String verify) {
        if (verify.equalsIgnoreCase("yes")) {
            return true;
        } else if (verify.equalsIgnoreCase("no")) {
            return false;
        } else
            return false;
    }
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean validName = false;
        boolean validTelephoneNo = false;
        boolean validAddress = false;
        String name="";
        String telephoneNo="";
        String address="";
    
        while (!validName) {
            System.out.print("Enter your name: ");
            name = input.next();
    
            System.out.println("Are you sure your name is " + name + "?");
            final String verify = input.next();
    
            if (isVerified(verify)) {
                System.out.println("Verified! Your name is: " + name);
                validName = true;
    
            } else {
                System.out.println("Not verified! Please type your name again.");
            }
        }
    
        while (!validTelephoneNo) {
            System.out.print("Enter your telephone nummber: ");
            telephoneNo = input.next();
    
            System.out.println("Are you sure your telephone number is " + telephoneNo + "?");
            final String verify = input.next();
    
            if (isVerified(verify)) {
                System.out.println("Verified! Your telephone number is: " + telephoneNo);
                validTelephoneNo = true;
            }
    
            else {
                System.out.println("Not verified! Please type your telephone number again.");
            }
        }
    
        while (!validAddress) {
            System.out.print("Enter your address: ");
            address = input.next();
    
            System.out.println("Are you sure your address is " + address + "?");
            final String verify = input.next();
    
            if (isVerified(verify)) {
                System.out.println("Verified! Your address is: " + address);
                validAddress = true;
            }
    
            else {
                System.out.println("Not verified! Please type your address again.");
            }
        }
    
        System.out.println("Done, here is your info:");
        System.out.println("Name: " + name);
        System.out.println("Telephone Number: "+telephoneNo);
        System.out.println("Address: "+address);
    }
    

    【讨论】:

    • 但我想知道如何添加另一个问题。这意味着当用户选择“是”时,程序应打印确认名称并询问下一个问题(此处为电话号码/地址)。并再次要求验证..
    • MihaiC,感谢您的解决方案。它也是一个很好的。但是由于我首先尝试了alester的代码,而且他的代码也更简单。我接受了他的回答。无论如何,感谢您的时间和精力,我会保留您的建议以备将来使用。
    • @JabirAlFatah 没问题 :) 这是一个更好的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多