循环不能正常工作

时间:2013-02-21 09:55:09

标签: java while-loop

我目前我的程序有问题,它无法正常循环,请帮助我。代码如下。提前谢谢!

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

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

13 个答案:

答案 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语句可以组合成:

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

我当然希望有帮助,我能够解决一些困惑!