我的学校有一个包含所有房间号码的文本文件。然后我有代码要求学生班级的房间号码。 kb是用户输入扫描仪,roomnos是文本文件扫描仪。这是代码:
String room = null;
boolean invalid = true;
while(invalid)
{
System.out.println("What is the room number of your class?");
room = kb.nextLine();
while(roomnos.hasNext())
{
String roomno = roomnos.nextLine();
if(room.equals(roomno))
invalid = false;
}
if(invalid == true)
{
System.out.println("The room number you've given is invalid.");
}
}
如果用户提供的第一个房间号有效,则代码有效。但是,如果用户输入了无效的房间号码,则循环不会停止,也就是说,即使房间号码有效,房间号码也会无效并一次又一次地询问房间号码。我认为嵌套while循环中的hasNext()不会重新启动并返回到文件的开头,因此,在较大的while循环的下一个循环期间无法搜索房间号。无论问题是什么,我该如何解决?
答案 0 :(得分:0)
检查无效输入是在while-loop 之外发生的,而循环根本没有中断条件。将检查移到循环内部,然后添加一个断开条件,以便在某个时间离开循环。
答案 1 :(得分:0)
我会以这种方式修改代码,添加一个意味着你可以获得多少行的值。
String room = null;
boolean invalid = true;
int maxline = 100;//i suppose
while(invalid)
{
int lineCounter=0;
System.out.println("What is the room number of your class?");
room = kb.nextLine();
while(roomnos.hasNext())
{
lineCounter++;
String roomno = roomnos.nextLine();
if(room.equals(roomno))
invalid = false;
if(lineCounter>maxline)
break;
}
if(invalid == true)
{
System.out.println("The room number you've given is invalid.");
}
}
因为你的代码不起作用的动机是文件几乎没有要读取的行,所以你必须在某一点上断。
答案 2 :(得分:0)
所以我自己弄清楚了。问题是我的想法,带有房间号码的文件的扫描仪没有重新启动,因此如果用户的第一个输入无效,则内部while循环不起作用。以下代码修复了问题:
String room = null;
boolean invalid = true;
while(invalid)
{
System.out.println("What is the room number of your class?");
room = kb.nextLine();
roomnos = new Scanner(new File("/*file location*/"));
while(roomnos.hasNext())
{
String roomno = roomnos.nextLine();
if(room.equals(roomno))
invalid = false;
}
if(invalid == true)
{
System.out.println("The room number you've given is invalid.");
}
roomnos.close();
}