为什么我的java代码在运行时永远不会结束?

时间:2015-05-25 23:01:55

标签: java string while-loop

我正在编写一个包含4个用户名和4个密码的程序。如果用户使用正确的密码输入正确的名称,则输出" Welcome!"。它只提供2次尝试。这就是我写的,但是当我运行这段代码时,它并没有结束。它不断要求用户名不停。有人可以帮助我,指导我做错了什么,或者我错过了什么?谢谢。

public class password

{

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        int limit = 2;

        int count = 0;

        String[] user = {"Diana","Jasmin","Jimmy","Ross"};

        String[] passwords = {"Flower01","Cheer02","Reading03","Math04"};

        while (true)
        {
            System.out.print("Enter Username: ");
            String [] name = input.nextLine();

            if(user.equals(name))
            {
                while (count < user.length)
                {
                    System.out.print("Enter password: ");
                    String [] word = input.nextLine();

                    if (word.equals(passwords))
                    {
                        System.out.println("Welcome!");
                    }
                    else
                    {
                        System.out.print("Sorry can not be found");
                       count++;
                    }
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

while(true) {...}

是一个永无止境的循环,你应该把条件放在真实的地方。 例如,你可以为第一个循环添加第二个计数(这里你想要4个)。

String [] name = input.nextLine();

此行不应编译,因为您要为数组指定字符串。

答案 1 :(得分:1)

以下是您的代码的简单切割。几件事

  1. 在首都开始上课名称。
  2. 您正在阅读输入为Array,这在输入时确实会失败。
  3. 如果用户名错误,您没有更新计数或显示任何内容。
  4. 使用Println在打印后获取新行。
  5. import java.util.Scanner;
    
    public class Password
    
    {
    
        public static void main(String[] args)
        {
            Scanner input = new Scanner(System.in);
    
            int limit = 2;
    
            int count = 0;
    
            String[] user = {"Diana","Jasmin","Jimmy","Ross"};
    
            String[] passwords = {"Flower01","Cheer02","Reading03","Math04"};
    
            while (count <4)
            {
                System.out.print("Enter Username: ");
                String name = input.nextLine();
    
                if(user.equals(name))
                {
                    while (count < user.length)
                    {
                        System.out.print("Enter password: ");
                        String word = input.nextLine();
    
                        if (word.equals(passwords))
                        {
                            System.out.println("Welcome!");
                        }
                        else
                        {
                            System.out.println("Sorry can not be found");
                           count++;
                        }
                    }
                }
                else
                {
                    System.out.println("Sorry can not be found");
                   count++;
                }
            }
        }
    }
    

答案 2 :(得分:0)

您的代码中有while true。您可能想要做的是用计数和限制条件替换while true。您的大部分代码已经到位,您只需要替换while true。

我也不确定你为什么会有第二个循环,它会迭代用户。我认为你最好做的是用一个简单的HashMap替换2个数组,如下所示:

Map users = new HashMap();
users.put("name1", "password1");
users.put("name2", "password2");
users.put("name3", "password3");
users.put("name4", "password4");

然后,根据用户名,您可以users.get(username)获取密码。然后,将密码与用户键入的密码进行比较。如果它是正确的,请说欢迎,如果它不正确,说错误,并递增计数器。然后,如果计数器大于最大值,则停止程序。希望有所帮助!