Java,用户输入的文件位置循环

时间:2016-10-24 17:25:54

标签: java file while-loop

所以我是第一次使用程序员,我的循环问题,对于我的生活,我似乎无法弄清楚我做错了什么。下面的代码应该是用户输入的文本文件的位置,如果它是正确的,它应该没有错误消息,但如果它不正确错误消息“不正确的文件位置”应该弹出,用户可以输入正确的位置。但是,在我终止程序之前,弹出的错误消息会一直弹出。任何人都可以给我一些关于我做错的建议吗?

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");
    }


    }
}

}

3 个答案:

答案 0 :(得分:1)

你的第一个问题是这一行:

while(flag = true)

=是作业,而不是比较。您想使用==进行比较。

此外,明确与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
}

这样做的效果是继续提示用户输入文件位置,直到他们输入错误的文件位置(在这种情况下退出)。您也可以执行相反的操作(继续提示他们输入文件,直到他们输入正确的文件)。

你可能还想考虑包括一个特殊的"关键字(例如"退出")并检查是否突破循环。

最后,您在循环之前明确地将flag设置为false,因此无法true

boolean flag = false;

之前工作的唯一原因是你之前为它分配true而不是进行比较。

答案 1 :(得分:1)

这里有两个主要问题。

首先,您编写了while(flag = true),这意味着“将值赋值为flag,然后在flag的结果值为true时继续循环”。这样的循环不会退出(除非你从循环中调用break)。

你可能意味着while(flag == true)(注意使用两个等号),其中说“检查flag的值是否为真,如果是,则继续循环”。你也可以说while(flag)

第二个问题是在进入while循环之前提示用户输入,因此每次循环迭代只会查看第一次给出的相同输入。要解决此问题,请移动提示(并读取)用户输入的代码。而不是在循环之前,它应该在循环的顶部。也就是说,而不是

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

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

答案 2 :(得分:-1)

while标志为false时,循环结束。所以编写如下代码:

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...