Noneyabees Ответов: 1

Я считаю, что что-то не так с моим первым циклом while. Как мне это исправить?


Я создаю программу, которая будет запрашивать у пользователей имя пользователя и пароль. Там имя пользователя и пароль сохраняются в файле, и программа будет искать в этом файле точную информацию. Если информация неверна 3 раза подряд, программа остановится. Моя программа не работает даже тогда, когда информация неверна. Я все время получаю неверное сообщение. Я не уверен, что это неправильно, но я думаю, что это мой первый цикл while. Мне бы не помешала помощь в его отладке. Ниже приведен мой код:

import java.io.*;
import java.util.Scanner;
public class LoginPage
{
   public static void main(String[] args) throws IOException
   {
       String answ = "";
       String user;
       String pass;
       boolean dog = true;
       int counter = 0;
       Scanner keyboard = new Scanner(System.in);
       System.out.println("Welcome! This program will allow you to sign in with a username and password you created.");
       System.out.println("If you fail to login correctly 3 times, this program will terminate.");
       System.out.print("Would you like to sign in?(Y/N): ");
       answ = keyboard.nextLine();
       if(answ.equalsIgnoreCase("N"))
       {
           System.out.print("Goodbye!");
           System.exit(0);
       }
       while(dog)
       {  
           System.out.print("What is your username?: " );
           user = keyboard.nextLine();
           System.out.print("What is your password?: ");
           pass = keyboard.nextLine();
           if(searchInfo(user) == false || searchInfo(pass) == false)
           {
               counter ++;
               System.out.println("This is invalid. Please try again.");
               if(counter==3)
               {
                   System.out.println("You have attempted you max amount of tries. This program will now end.");
                   System.exit(0);
               }
           }
           else if (searchInfo(user) == true || searchInfo(pass) == true)
           {
               dog = false;
           }
       }
       System.out.print("Congrats! You successfully signed in!");  
      
   }
   public static boolean searchInfo(String info)throws IOException
   {
       Scanner txtscan = new Scanner("loginInfo.txt");
       boolean thingy = true;
       while(txtscan.hasNextLine())
       {
           String str = txtscan.nextLine();
           if(str.equals(info))
           {
               thingy = true;
           }
           else
           {
               thingy = false;
           }
       }
       return thingy;
   }
}


Что я уже пробовал:

Я несколько раз пытался изменить свой цикл while, но это не сработало.

Patrice T

- Я все время получаю неверное сообщение."
из вашего кода или чего-то еще?
скажи сообщение.

Noneyabees

Так что это мое собственное сообщение об ошибке, которое я создал в коде, указывая, что информация недействительна. Я копирую и вставляю из файла, который сохраняет информацию об имени пользователя и пароле. Так что, по моей логике, я не должен получать это сообщение об ошибке, потому что информация верна.

Patrice T

смотрите мое решение.

1 Ответов

Рейтинг:
1

Patrice T

Еще одна проблема, с которой вы столкнулись, - это этот код:
То, как вы проверяете этого пользователя и пароль, во многом неверно:
- в этом коде thingy сообщает вам, соответствует ли последняя строка файла тому коду, который вы ищете. это жучок.

while(txtscan.hasNextLine())
{
    String str = txtscan.nextLine();
    if(str.equals(info))
    {
        thingy = true;
    }
    else
    {
        thingy = false;
    }
}

- если файл состоит из 2 строк:
name
pass

После исправления ошибки он примет:
user= "name"; pass= "name";  // accepted
user= "name"; pass= "pass";  // accepted
user= "pass"; pass= "name";  // accepted
user= "pass"; pass= "pass";  // accepted

а это неправильно.


Цитата:
Мне бы не помешала помощь в его отладке.

Инструмент под названием debugger находится здесь именно для этого.
Цитата:
Я не уверен, что это неправильно, но я думаю, что это мой первый цикл while.

Используйте отладчик и убедитесь в этом.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.