如果我从代码中理解您的愿望,则存在一些严重错误:
首先,如果用户名和密码“admin”是正确的,并且你想结束循环,代码应该是:
System.out.print("Success!");
tryAgain = false;
不是:
System.out.print("Success!");
tryAgain = true;
将 tryAgain 设置为 false 意味着(当您的变量(和以后的代码)被写入时)程序不会“重试”用户名和密码(循环将停止循环)。
此外,您在以下陈述中有相同的差异:
if(user!="admin" && pass!="admin"){
...
tryAgain = false;
tryAgain 应在此处设置为 true,因为您希望编程为“重试”输入名称和密码 ( tryAgain = true
)。
最后,最重要的是,您的循环 while 命令实际上并没有做任何事情。这:
while(tryAgain = true);
正在定义一个变量,而不是从中读取信息。你必须写:
while(tryAgain == true);
如果您想检查 tryAgain 是否设置为 true。
除此之外,这里还有一些不好的编码风格选择:
- 有两个单独的 if 语句,其中一个可以工作
- 考虑字符串时使用 '!='
- 考虑布尔值时有任何“=”
您的两个 if 语句可以合并为:
if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false;
}
else{
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true;
}
由于只有一种方法可以成功,因此没有理由不将其他所有内容都放在 else 子句中。
最后的while语句可以简单地写成:
while(tryAgain)
虽然 tryAgain 为真,但它会循环。
这里的另一个问题是,如果用户只是单击 enter 并且 pass 被读取为空字符串。当程序尝试将字符串与“admin”进行比较时,它会抛出异常。我会添加一个首字母:
if(user.isEmpty() || pass.isEmpty()){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false
}
到 if 语句。
这是我对代码的处理方式:
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.*;
public class Wewe{
public static void main(String[]args){
Scanner inp = new Scanner(System.in);
boolean tryAgain = true;
do{
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if(user.isEmpty() || pass.isEmpty()){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false
}
else if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false;
}
else{
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true;
}
}while(tryAgain);
}
}
我当然希望这会有所帮助,并且我能够解决一些困惑!