所以我是第一次使用程序员,我的循环问题,对于我的生活,我似乎无法弄清楚我做错了什么。下面的代码应该是用户输入的文本文件的位置,如果它是正确的,它应该没有错误消息,但如果它不正确错误消息“不正确的文件位置”应该弹出,用户可以输入正确的位置。但是,在我终止程序之前,弹出的错误消息会一直弹出。任何人都可以给我一些关于我做错的建议吗?
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");
}
}
}
}
答案 0 :(得分:1)
你的第一个问题是这一行:
while(flag = true)
=
是作业,而不是比较。您想使用==
进行比较。
此外,明确与true
和false
进行比较并不是必要的(并认为风格较差),所以在这种情况下,您甚至不需要做明确的比较。您可以执行以下操作:
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...