我目前我的程序有问题,它无法正常循环,请帮助我。代码如下。提前谢谢!
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;
do{
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = true;
}
if(user!="admin" && pass!="admin"){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false;
}
}while(tryAgain = true);
}
}
我想要发生的是,一旦用户输入错误的用户名或密码,程序将循环。但是如果用户输入了正确的用户名或密码,它就不会循环询问用户是否正确。
答案 0 :(得分:4)
以这种方式尝试:
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.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false;
}
if(!user.equals("admin") || !(pass.equals("admin")){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true;
}
}while(tryAgain);
}
}
答案 1 :(得分:3)
更改
if(user!="admin" && pass!="admin")
至if(user!="admin" || pass!="admin")
如果您要检查无效的用户名或密码
答案 2 :(得分:2)
while(tryAgain == true)
change = to ==
=
用于分配值。
==
用于检查条件。
您也可以使用。
while(tryAgain)
答案 3 :(得分:2)
这会将true
分配给tryAgain
(它将始终评估为true
,从而创建无限循环):
} while(tryAgain = true)
所以它应该是:
} while(tryAgain == true)
但是通过遵循良好的编码风格可以避免整个问题;应该简单地说:
} while(tryAgain)
永远不要将布尔变量与布尔常量进行比较,只需使用booleanVar
或!booleanVar
作为条件
答案 4 :(得分:1)
成功后将tryAgain
设置为false以打破循环。在检查用户是否已成功登录以跳过对无效用户的检查后,还使用else if
。另外还有人提到String
对象的比较应该使用equals
方法。最后,while循环应该使用比较运算符==
而不是赋值运算符=
。
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
boolean tryAgain;
do {
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if (user.equals("admin") && pass.equals("admin")) {
System.out.print("Success!");
tryAgain = false; //Changed to false to break loop
}else if (!user.equals("admin") && !pass.equals("admin")) {
//^Using equals instead of ==, added else if
JOptionPane.showMessageDialog(null,
"Try again! Invalid username or password!",
"Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false;
}
} while (tryAgain == true); //using == instead of =
}
答案 5 :(得分:1)
试试这个:
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.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false;
}
if(user!="admin" && pass!="admin"){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true;
}
} while(tryAgain);
}
}
答案 6 :(得分:0)
您的代码中存在一些错误:
if(user!="admin" && pass!="admin"){ .... tryAgain = false;
应该是:
if(user!="admin" || pass!="admin"){ .... tryAgain = true;
然后:
System.out.print("Success!");
tryAgain = true;
应该是:
System.out.print("Success!");
tryAgain = false;
最后:
while(tryAgain = true);
应该是:
while(tryAgain == true);
或仅while(tryAgain);
希望有所帮助!
答案 7 :(得分:0)
使用等于而不是 == 和
Scanner inp = new Scanner(System.in);
boolean tryAgain;
do{
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = true;
}
if( !"admin".equals(user) && !"admin".equals(pass)){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false;
}
}while(tryAgain = true);
答案 8 :(得分:0)
为什么不只是使用else而且tryAgain被错误地用于此
if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = false; //why repeat again
}
else{
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = true; //ask again
}
也是
while(tryAgain)
答案 9 :(得分:0)
检查以下解决方案。
public static void main(String[]args){
Scanner inp = new Scanner(System.in);
boolean tryAgain;
do{
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if(user.equals("admin") && pass.equals("admin")){
System.out.print("Success!");
tryAgain = true;
}
if(!user.equals("admin") || !pass.equals("admin")){
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE);
tryAgain = false;
}
}while(tryAgain);
}
}
您正在将两个字符串对象与!=进行比较。那是错的。
你帖子中的问题行是: if(user!=“admin”&& pass!=“admin”){
答案 10 :(得分:0)
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;
do
{
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
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 == true);
}
}
已经做了很多改变。
首先,您的代码已正确缩进 - 这使得任何想要帮助的人都变得容易多了!
其次,您不需要有两个if语句。您可以使用if-else语句,因为您要执行此操作:“如果用户具有正确的名称和密码,请执行此操作。如果用户没有正确的名称和密码,请执行此操作。”可以缩短为“如果您的用户拥有正确的名称和密码,请执行此操作。如果没有,请执行此操作。”。
第三,当tryAgain为true时,你的do-while循环将继续,因此你需要while(tryAgain = true)
而不是while(tryAgain == true)
,因为两个等号用于比较,而单个符号则不是。{ / p>
第四,当tryAgain为true时你的循环继续,所以如果输入无效的用户名或密码,你想要tryAgain为真,继续循环,如果输入正确的循环,则为false,以停止循环。 / p>
此外,不要使用==来比较字符串。 ==检查两个对象是否相同,因此用户永远不会==“admin”。相反,使用equals()方法来比较字符串。
答案 11 :(得分:0)
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
boolean tryAgain = false;
do {
System.out.print("\nInput username: ");
String user = inp.nextLine();
System.out.print("\nInput password: ");
String pass = inp.nextLine();
if (user.equals("admin") && pass.equals("admin")) {
System.out.print("Success!");
tryAgain = true;
inp.close();
} else {
JOptionPane.showMessageDialog(null,
"Try again! Invalid username or password!",
"Error Logging-In", JOptionPane.ERROR_MESSAGE);
}
} while (tryAgain == false);
}
答案 12 :(得分:0)
如果我理解您对代码的偏好,则会出现一些严重错误:
首先,如果用户名和密码“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(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为true,但它会循环。
这里的另一个问题是,如果用户只是单击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);
}
}
我当然希望有帮助,我能够解决一些困惑!