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 = 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);
        }
    }

我想要发生的是,一旦用户输入了错误的用户名或密码,程序就会循环。但是如果用户输入了正确的用户名或密码,它就不会循环询问用户是否输入正确的用户名或密码。

4

13 回答 13

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);
        }
    }
于 2013-02-21T09:57:48.443 回答
3

改变

if(user!="admin" && pass!="admin")if(user!="admin" || pass!="admin")

如果您想检查无效的用户名密码

于 2013-02-21T09:57:06.177 回答
2

while(tryAgain == true)改变 = 到 ==

=用于赋值。

==用于检查条件。

您也可以使用 .

while(tryAgain)
于 2013-02-21T09:56:52.133 回答
2

这分配truetryAgain(它总是评估为true,创建一个无限循环):

} while(tryAgain = true)

所以应该是:

} while(tryAgain == true)

但是通过遵循良好的编码风格可以避免整个问题;它应该很简单:

} while(tryAgain)

永远不要将布尔变量与布尔常量进行比较,只需使用booleanVar!booleanVar作为您的条件

于 2013-02-21T10:01:54.177 回答
1

成功后设置tryAgain为 false 以中断循环。还可以使用else ifafter 检查来查看用户是否已成功登录以跳过对无效用户的检查。也正如其他人提到的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 =
    }
于 2013-02-21T09:57:46.537 回答
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);
    }
}
于 2013-02-21T09:58:27.093 回答
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);

希望有帮助!

于 2013-02-21T10:00:32.467 回答
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);
于 2013-02-21T10:01:14.853 回答
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)
于 2013-02-21T10:03:14.403 回答
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"){

于 2013-02-21T10:04:54.723 回答
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 语句,因为您想这样做:“如果用户的名称和密码正确,请执行此操作。如果用户的名称和密码不正确,请执行此操作。” 可以缩写为“如果您的用户具有正确的用户名和密码,请执行此操作。如果没有,请执行此操作。”。

while(tryAgain = true)第三,当 tryAgain 为真时,您的 do-while 循环将继续,因此您需要代替while(tryAgain == true),因为两个等号用于比较,而一个不用于比较。

第四,当 tryAgain 为真时,您的循环继续,因此如果他们输入无效的用户名或密码,您希望 tryAgain 为真以继续循环,如果输入正确的用户名或密码则为假,以停止循环。

另外,不要使用 == 来比较字符串。== 检查两个对象是否相同,因此用户永远不会 == "admin"。相反,使用 equals() 方法来比较字符串。

于 2013-02-21T10:07:33.027 回答
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);
}
于 2013-02-21T10:12:03.250 回答
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 语句可以合并为:

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);
        }
    }

我当然希望这会有所帮助,并且我能够解决一些困惑!

于 2013-02-21T10:32:14.040 回答