读取一个文件并确定一个字符串
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]相匹配,请继续执行第 3 步
- 当 info[0] 包含 "VOTED" 时,它将收到一条错误消息,指出该选民的号码已经投票并输入另一个选民号码。如果为假,它将进入投票过程
- 现在信息[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
}
假设我的文本文件包含以下内容:
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]相匹配,请继续执行第 3 步
- 当 info[0] 包含 "VOTED" 时,它将收到一条错误消息,指出该选民的号码已经投票并输入另一个选民号码。如果为假,它将进入投票过程
- 现在信息[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
}