2016-10-24 15 views
1

私は初めてのプログラマであり、私のループに問題があります。私の人生では、私が間違っていることを理解できないようです。以下のコードは、ユーザーが入力したテキストファイルの場所を取ることになっていますが、正しい場合はエラーメッセージは表示されませんが、エラーメッセージ "不正なファイルの場所"が表示され、ユーザーは正しい場所を入力できます。しかし、何が起こるかは、プログラムを終了するまで、エラーメッセージのポップアップがポップアップし続けることです。私が間違っていることを誰かに助言することはできますか?Javaのユーザ入力ファイルの位置ループ

while(flag = true) 

=割り当て、ない比較です:

import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 
public class ReadingText { 

public static void main(String [] args){ 
    System.out.println("Input the full path to the text file location: "); 

    Scanner keyboardInput = new Scanner(System.in); 
    String userFileLocation = keyboardInput.nextLine(); 
    File s = new File(userFileLocation); 
    boolean flag = false; 

    while(flag = true) 
    { 

    try 
    { 
    Scanner sc = new Scanner (s); 
    while(sc.hasNext()) 
    { 

    } 
    }catch (FileNotFoundException e) 
    { 
    System.out.println("Incorrect File Location"); 
    } 


    } 
} 

}

+4

ヒント: '=='比較 –

+0

または単に ''(フラグ)しばらく、 – Pau

答えて

1

ここには2つの大きな問題があります。

最初に、while(flag = true)と書いています。これは、「flagに値trueを割り当て、flagの結果値がtrueの場合はループを続ける」という意味です。このようなループは終了しません(ループ内からbreakを呼び出さない限り)。

while(flag == true)(2つの等号記号に注意してください)は、 "flagの値が真であるかどうかをチェックし、もしあればループを続ける"という意味でしょう。 while(flag)と言うこともできます。

第2の問題は、whileループに入る前に入力を求めるプロンプトが表示されるため、各ループの反復が最初に与えられたのと同じ入力を見てしまうことです。これを修正するには、ユーザーの入力を促すコードを移動します。ループの前ではなく、ループの先頭にあるはずです。それはフラグがfalseの場合、ループは終了しますが、あなたが

while (flag == true) { 
    // prompt for input 
    // read input 
    // ... 
} 
+0

ありがとうフィードバックのためのみんなとヘルプ、マークAdlesbergerをあなたの答えは私の問題を解決しました。私は自分のスタイルを改善するためのフィードバックに感謝します。 –

1

あなたの最初の問題は、このラインです。比較のために==を使用します。

truefalseと明示的に比較する必要はありません(また、貧弱なスタイルとみなされます)。この場合、明示的に比較する必要はありません。

while (flag) 

また、あなたが実際にループ内flagの値を設定したことがないので、これは無限ループです:あなたは、次のような何かを行うことができます。この効果は、彼らが(それが終了した場合には)間違ったファイルの場所を入力するまで、ファイルの場所をユーザーに促すために継続することになります

catch (FileNotFoundException e) 
{ 
    System.out.println("Incorrect File Location"); 
    flag = false; // Break out of the loop at this point if that's what you intended 
} 

:あなたは、次のようなものを検討してください。また反対にすることもできます(正しいファイルを入力するまでファイルの入力を要求し続ける)。

「終了」のような「特別な」キーワードを含めることを検討し、ループから脱出することを確認することもできます。

最後に、あなたが明示的に右のループの前falseflagを設定し、それが今までtrueされるために方法はありません。

boolean flag = false; 

それが前に働いていた唯一の理由は、あなたが前にそれにtrueを割り当てたました比較をする代わりに。

-1

を持つべきである代わりに

// prompt for input 
// read input 
while (flag == true) { 
    // .... 
} 

で、です。だから、以下のようにコードを記述します。

boolean flag = true; 

while(flag) { 

    if file found then 
    flag = false; // to exit while loop 

    if file not found then keep flag = true so it will loop again... 
+0

これはもちろん、ユーザーが正しいファイルを入力した場合にループから脱出したいと仮定しています。 "Exit"のような "予約語"を用意してチェックする方がいいでしょう。 – EJoshuaS

+0

その理由は私がコメントを追加しました – donlys

+0

フラグ= false; //あなたがあなたの答えに行ったことであるループ – donlys

関連する問題