2016-05-13 70 views
-2

我正在用java編寫一個簡單的文件I/O程序,我的程序允許用戶輸入他們希望編輯的文件(這將是我讀取的文件使用我的FileReader)。但是,我想繼續提示用戶輸入文件名,直到他們輸入一個有效的文件(一個已經存在的文件)。出於某種原因,我的編譯器(Eclipse)告訴我,「布爾變量loopFlag沒有被使用」在任何地方。java在while循環中無法訪問變量

當我運行程序時,如果用戶輸入錯誤的輸入(不存在的文件),程序將正常運行並再次提示用戶輸入文件名。但是,如果用戶輸入了一個好的輸入(一個已經存在的文件),程序會無限循環並且仍然提示用戶輸入文件名。這裏是我的代碼:

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

它應該是'while(loopFlag == true)'或更好,'while(loopFlag)'。當你使用'='時,你正在分配*。 – RealSkeptic

回答

5
while (loopFlag = true) 

在上面的代碼中你設置 loopFlag布爾值真,比較它

此代碼應該是:

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

PS:

我的編譯器(Eclipse)告訴我「布爾變量loopFlag是 不使用」

相信你的IDE),它暗示,你從來沒有使用過任何邏輯,你只能分配一個值。

+2

而大多數自我認識的IDE(例如Eclipse)將會顯示一個警告並將其標記爲潛在錯誤,爲您節省寶貴的時間;-) – Falco

+0

上帝保佑你,因爲一個被遺忘的等號而花費的時間 謝謝 –

1

您在while語句中有錯誤應該是while (loopFlag);while (loopFlag == true);語句loopFlag = true是assigment,具有操作的價值,在這種情況下是正確的。