Make While Statement True(来自另一个类的调用方法)

时间:2012-05-13 20:48:20

标签: java loops

public class Driver {
    public static void main(String args[]) {

        Encryption pass = new Encryption();

        while(CODE){
            System.out.println("Please enter a password");
            String name = KeyboardReader.readLine();

            System.out.println("Encrypted Password:  " + pass.encrypt(name));
            System.out.println("Decrypted Password:  " + pass.decrypt(name));
        }
    }

    boolean isValidLength (String password) {
        if (password.length() < minLength) {
            return true;
        } else {
            return false;
        }
    }
}

如何使声明在上面成立?我需要这样做,以便如果用户输入的密码不够长或没有有效密码,他们可以反复输入密码。不确定我的while循环是否正确,但我必须从我的isValidLength方法调用才能使其成立。发现的任何错误都会有所帮助。

3 个答案:

答案 0 :(得分:0)

类似的东西:

while(true){
    //read the password
    ...
    if (isValidLength(password)){
        break;
    }
}
//proceed with encryption
...

答案 1 :(得分:0)

我建议使用do ... while代替while循环。在伪代码中:

boolean ok;
do {
    <get user input>
    ok = <check validity of user input>
} while (!ok);

如果必须使用while循环,只需使用上述逻辑,但将ok初始化为false

boolean ok = false;
while (!ok) {
    <get user input>
    ok = <check validity of user input>
}

此外,我认为您目前在isValidLength中的逻辑是倒退的。如果要从static调用它,还必须声明main

答案 2 :(得分:0)

我可以看到一些需要注意的事情:

  • 您对pass.decrypt(name)的来电似乎将用户输入的明文传递给名为decrypt()的函数。也许您想要传递pass.encrypt(name)的返回值?

  • 如果字符串的长度小于您的最小值,则isValidLength()函数将返回true。我想你反过来想要这个。

对于你的while循环,我建议一种通常称为“循环半”的结构:

while (true) {
    System.out.println("Please enter a password:");
    String name = KeyboardReader.readLine();
    if (isValidLength(name)) {
        break;
    }
    System.out.println("Your entered password was not long enough.");
}
System.out.println("Encrypted Password:  " + pass.encrypt(name));
// ... rest of code

使用此构造,break位于循环的中间。循环的下半部分是告诉用户他们需要做些什么来纠正错误输入的地方。循环结束后,您可以假设用户的输入已通过isValidLength()检查。