使用Java中的文本文件检查用户输入错误

时间:2016-11-08 14:00:08

标签: java

我的学校有一个包含所有房间号码的文本文件。然后我有代码要求学生班级的房间号码。 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循环的下一个循环期间无法搜索房间号。无论问题是什么,我该如何解决?

3 个答案:

答案 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();
}