2013-05-14 2 views
2

Я получаю ошибкуЧтения и сравнение строк в текстовом файле, переменные не инициализируются

локального переменное имя и пароль не могут быть инициализированы,

для Условного оператора , Эти ошибки исчезают, если я изменяю вторую строку в круглых скобках на что-то в кавычках или устанавливаю переменные в 0, но тогда мне также нужно будет их изменить до int, и мне нужно, чтобы они были String.

Я пытаюсь сравнить имя пользователя и пароль из текстового файла с новым именем пользователя и паролем. Программа также должна выйти после 3 неудачных попыток, поэтому я, вероятно, также поставлю System.out.println("Goodbye!"); в неправильном месте.

public static void main(String[] args) { 

     int numberOfAttempts = 1; 
     String fileName = "logins.txt"; 
     Scanner inputStream = null; 
     String name, password, line, secondname; 
     String secondpassword; 


     do 
     { 
      System.out.println("Please enter your username: "); 
      Scanner keyboard = new Scanner(System.in); 
      secondname = keyboard.nextLine(); 
      System.out.println("Please enter your password: "); 
      secondpassword = keyboard.nextLine(); 
      try 
      { 
       inputStream = new Scanner(new File(fileName)); 
      } 
      catch(FileNotFoundException e) 
      { 
       System.out.println("Error opening the file " + 
         fileName); 
       System.exit(0); 
      } 
      while (inputStream.hasNextLine()) 
       { 
        line = inputStream.nextLine(); 
       } 
      if ((name.equalsIgnoreCase(secondname))&& 
        (password.equalsIgnoreCase(secondpassword))) 
      {System.out.println("Welcome!"); 
      numberOfAttempts = 4; 
      } 

      else 
       System.out.println("Invalid. Please try again."); 
      numberOfAttempts++; 

     } 

     while (numberOfAttempts <4); 
     System.out.println("Goodbye!"); 


     inputStream.close(); 

    } 

} 
+1

Настройте свои строки на "", а затем соедините данные?Когда оператор if пытается сравнить ваше имя или парольную переменную, он не получил значение, присвоенное им, чтобы оно даже сравнивало что-либо. Какова ценность имени и пароля? Вы должны что-то им назначить. –

ответ

0

В методах JAVA любая локальная переменная должна быть сначала инициализирована, и ее можно использовать. В вашем случае вы пытаетесь сравнить имя & пароль в вашем коде никогда не инициализируется или не назначается значение. Будет хорошей идеей инициализировать ваши строки как NULL или пустую строку, такую ​​как «" или любое требуемое значение.

+1

обновил разрешение в соответствии с вашим комментарием. –

+0

спасибо! это решило мою проблему с ошибками. но, как упомянуто пользователем deong, я не могу сравнить строки, поскольку все, что считывается из txt-файла, выбрасывается. вы знаете, как это исправить? моя книга java чрезвычайно бесполезна –

+0

Когда разрешение поможет вам, вы можете взломать и принять его, чтобы подтвердить другим пользователям, что это действительное разрешение. –

1

Вы никогда не инициализируете name и password, поэтому, конечно, вы получите эту ошибку.

Вы инициализируете secondname и secondpassword, но ваше условие проверяет name и password, которые не инициализируются.

0

У вас есть куча проблем.

Ошибки вызваны тем фактом, что вы никогда не назначаете никакие значения переменным «имя» и «пароль», но затем проверяете, соответствуют ли эти переменные переменным secondname и secondpassword, которые вы читаете. Поскольку имя и пароль никогда не получают никаких значений, сравнение не может быть таким, каким вы намереваетесь, поэтому компилятор помещает его как ошибку.

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

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

while(inputStream.hasNextLine()) { 
    line = inputStream.nextLine(); 
} 

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

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

+0

Большое вам спасибо за помощь. Я понимаю, почему он сейчас не работает, но я не знаю, как его исправить. моя java-книга не обошла это. Вы можете вообще помочь? Это будет высоко ценится. –

Смежные вопросы