2016-05-13 3 views
-2

Я пишу простую программу ввода-вывода файлов в java, и моя программа позволяет пользователю вводить файл, который они хотят редактировать (это будет файл, который я прочитал в используя мой FileReader). Тем не менее, я хотел бы продолжать предлагать пользователю вводить имя файла до тех пор, пока он не войдет в действительный файл (файл, который уже существует). По какой-то причине мой компилятор (Eclipse) говорит мне, что «булева переменная loopFlag не используется» нигде.java do while loop не может получить доступ к переменной

Когда я запускаю программу, если пользователь вводит плохой ввод (файл, который не существует), программа запускается правильно и снова запрашивает пользователя для имени файла. Однако, если пользователь вводит хороший ввод (файл, который уже существует), программа бесконечно циклически и все еще предлагает пользователю ввести имя файла. Вот мой код:

String fileName; 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // read in user input 
boolean loopFlag; // compiler says this is not used anywhere, but I use it in my do-while loop?!?! 

do 
{ 
    loopFlag = false; 
    System.out.println("Please enter the file name you wish to edit (including extension):"); 
    fileName = br.readLine(); // set fileName equal to user input 
    // this try catch block is to make sure that the file exists 
    try 
    { 
      FileReader fr = new FileReader(ManipulateText.readFileName); 
      fr.close(); 
    } 
    catch (FileNotFoundException fnfe) 
    { 
      System.err.println("No file found: " + fileName); 
      loopFlag = true; // repeats the loop until user enters valid file 
    } 
} while (loopFlag = true); 

Если кто-нибудь может помочь, я ценю его.

+5

напишите его как 'while (loopFlag)', вы в настоящее время назначаете ему true только с каждой итерацией, и цикл никогда не останавливается. Вы хотели иметь его как 'loopFlag == true', но сравнение с' true' здесь необязательно (и, по крайней мере, для меня не так приятно читать как просто «while (loopFlag)») – SomeJavaGuy

+1

Он должен be 'while (loopFlag == true)' или лучше, 'while (loopFlag)'. Вы * присваиваете *, когда используете '='. – RealSkeptic

ответ

5
while (loopFlag = true) 

В коде выше вы настройки логическое значение loopFlag как истинное, НЕ сравнивая

Этот код должен быть:

while (loopFlag) 
or 
while (loopFlag == true) 

PS:

мой компилятор (Eclipse) говорит мне, что " булева переменная loopFlag является не используется»

Trust ваш IDE;), он предполагает, что вы никогда не использовали его для какой-либо логики, вы назначены только ему значение.

+2

И большинство уважающих себя IDE (например, Eclipse) выведут предупреждение и отметят это как потенциальную ошибку, экономя ваше драгоценное время ;-) – Falco

+0

god damnit, все это время, проведенное только из-за одного забытого знака равенства спасибо –

1

У вас есть ошибка в операторе while, это должно быть while (loopFlag); или while (loopFlag == true); заявление loopFlag = true является ориентиром и имеет значение opperation, и это правда в этом случае.