读取一个文件并确定一个字符串

read a file and determine a String

假设我的文本文件包含以下内容:

NOT VOTED/1/gello/18
NOT VOTED/2/tara/24

安排是这样的status if user already voted or not/voter's number/name/age我把信息行分成了数组所以是这样的

info[0]=status/info[1]=voters number/info[2]=name/info[3]=age

这是我的程序的功能:

  1. 读取文件
  2. 让用户输入选民号码
  3. 如果选民人数与信息[1]相匹配,请继续执行第 3 步
  4. 当 info[0] 包含 "VOTED" 时,它将收到一条错误消息,指出该选民的号码已经投票并输入另一个选民号码。如果为假,它将进入投票过程
  5. 现在信息[0] 将更改为 "VOTED"

这是我的代码:

        File original = new File("C:\voters.txt");//open the original file     
        File temporary = new File("C:\tempvoters.txt");//create temporary file

        BufferedReader infile = new BufferedReader(new FileReader(original));//read the file
        PrintWriter outfile = new PrintWriter(new PrintWriter(temporary));//write the data

        vNum=JOptionPane.showInputDialog("Enter voters number: ");
        String line=null;
        String something="VOTED";
        while((line=infile.readLine())!=null){

            String [] info=line.split("/");
            if(info[1].matches(vNum)){

                while(info[0].matches(something)) {
                    JOptionPane.showMessageDialog(null, "Voter already voted or Voter not registered. Please try again");
                    vNum=JOptionPane.showInputDialog("Enter voters number: ");
                }

                President();
                Vice_President();
                info[0]="VOTED";
                all=info[0]+"/"+info[1]+"/"+info[2]+"/"+info[3]+"/"+info[4]+"/"+info[5]+"/"+info[6]+"/"+info[7]+"/"+info[8]+"/"+info[9]+"/"+info[10]+"/"+info[11]+"/"+info[12];
                outfile.println(all);
                outfile.flush();
            }
            else{
                outfile.println(line);
                outfile.flush();
            }


        }

        infile.close();
        outfile.close();

        original.delete();//delete the original file
        temporary.renameTo(original);//rename the temporary file to original file

现在这发生在我编写的代码中:

假设我输入 1 作为选民编号。因为 info[0] 仍然包含 "NOT VOTED",它将继续进行投票过程,之后 info[0] 的元素现在包含 "VOTED"。现在在该过程之后它将返回主菜单。现在,当我再次返回输入另一个选民号码时,我尝试再次输入 1 以查看是否会出现错误消息。它做了。所以我再次输入了另一个选民的号码,它是 2 并且它的信息 [0] 仍然包含 "NOT VOTED" 但错误消息仍然会出现!!我真的被那个过程困住了,我不知道该怎么办了,因为我真的不知道哪里出了问题。想想我程序的这个方法中的功能与我拥有的其他方法一样。求求你帮忙

while(info[0].matches(something))

在我看来,您似乎没有跳出此 while 循环,因为变量 "something" 未更改,因此 info[0] 将始终为真。我的建议是:

{
JOptionPane.showMessageDialog(null, "Voter already voted or Voter not registered. Please try again");
vNum=JOptionPane.showInputDialog("Enter voters number: ");
something = "NOT VOTED"; //This will break the loop
}