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

Java,用户输入的文件位置循环,java,file,while-loop,Java,File,While Loop,所以我是第一次做程序员,我的循环有问题,而且我一辈子都不知道自己做错了什么。下面的代码应该是用户输入的文本文件位置,如果正确,则不会出现错误消息,但如果错误,则会弹出错误消息“文件位置错误”,用户可以输入正确的位置。但是发生的是错误信息会一直弹出,直到我终止程序。谁能就我做错了什么给我一些建议 import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class Read

所以我是第一次做程序员,我的循环有问题,而且我一辈子都不知道自己做错了什么。下面的代码应该是用户输入的文本文件位置,如果正确,则不会出现错误消息,但如果错误,则会弹出错误消息“文件位置错误”,用户可以输入正确的位置。但是发生的是错误信息会一直弹出,直到我终止程序。谁能就我做错了什么给我一些建议

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


    }
}

}您的第一个问题是这一行:

while(flag = true)
=
是赋值,不是比较。您想使用
==
进行比较

此外,没有必要(也被认为是糟糕的风格)显式地与
true
false
进行比较,因此在这种情况下,您甚至不需要进行显式比较。您可以执行以下操作:

while (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
}
此外,您从未在循环内实际设置
标志的值,因此这是一个无限循环。你可以考虑如下的事情:

while (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
}
这样做的效果是继续提示用户输入文件位置,直到用户输入错误的文件位置为止(在这种情况下,它会退出)。您也可以做相反的事情(不断提示他们输入文件,直到他们输入正确的文件)

您可能还想考虑包含一个“特殊”关键字(如“退出”),并检查是否退出循环。< /P> 最后,您在循环之前明确地将

标志设置为
false
,因此它不可能是
true

boolean flag = false;

它以前工作的唯一原因是您以前给它赋值
true
,而不是进行比较。

这里有两个主要问题

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

您可能指的是
while(flag==true)
(注意使用了两个等号),表示“检查flag的值是否为true,如果为true则继续循环”。你也可以说
while(flag)

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

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

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

当标志为false时,While循环将结束。因此,请按如下方式编写代码:

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

提示:
==
用于比较,或者简单地
而(flag)
,当然,这假设如果用户输入了正确的文件,他希望跳出循环。最好是使用“退出”之类的“保留字”并检查它,这就是为什么我添加了commentflag=false;//要退出循环,这也是您在回答中所做的:flag=false;//在这一点上打破循环如果这是你想要的谢谢大家的反馈和帮助Mark Adlesberger你的回答解决了我的问题。我也很感激关于改进我的风格的反馈。