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你的回答解决了我的问题。我也很感激关于改进我的风格的反馈。