如果我理解你的愿望出来的代码,有几个严重的错误:
首先,如果用户名和密码“admin”是正确的,你要结束的循环中,代码应该是:
System.out.print("Success!");
tryAgain = false;
不是:
System.out.print("Success!");
tryAgain = true;
设置TRYAGAIN为false意味着(如您变量(和后面的代码)被写入)程序将不会再次尝试用户名和密码(循环将停止循环)。
此外,你必须在下面的语句相同的差异:
if(user!="admin" && pass!="admin"){
...
tryAgain = false;
TRYAGAIN应设置为真在这里,只要你想进行编程,以“重试”为输入名称和密码(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是真的,这将循环。
这里的另一个问题是,如果用户只是点击输入并且传递读为空字符串。当程序尝试将字符串与“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);
}
}
我当然希望可以帮助,我能够理清一些混乱!
我认为你应该把'tryAgain = true'改成'tryAgain == true'? – CAMOBAP 2013-02-21 09:56:21
为什么你正确使用'equals()'比较字符串,然后四行后'!='? – 2013-02-21 09:57:12
他保持新鲜? – pandorym 2013-02-21 10:00:55