因此,我在项目中编写了代码,在其中将一些投票存储在单独文件中。然后,我读取该文件,并将行中的票数提取到一维数组中,然后像用户输入1一样将其递增,如果第一行中添加了1票,如果用户输入2,则将一票递增了。 2排,依此类推。之后,我必须将添加了票数的递增数组存储到最初提取它们的同一文件中(覆盖)。
我面临两个问题,首先,当用户输入1时,实际上完成了7个增量,因为当数组长度为7时,循环运行了7次。第二个问题是,文件被覆盖后,它显示结果将在输出中增加投票数,但是文件变为空,并且再次运行该文件时,即使最后使用了output.close(),它也会显示0,0,0,0...。
请建议,我明天必须提交项目,还有很多东西要写,如果有人可以借出2,3个小时来提供帮助,那将是很好的。
public static int[] voteCasting(String resultFile) {
String[] votesArray = new String[7];
int[] votesConverted = new int[votesArray.length];
try {
String partyVotes = "";
int castedVotes;
int i = 0;
Scanner uI = new Scanner(System.in);
Scanner rF = new Scanner (new File(resultFile));
int userInput = uI.nextInt();
while (rF.hasNext()) {
partyVotes = rF.next();
votesArray[i]= partyVotes;
votesConverted[i] = Integer.parseInt(votesArray[i]);
i++;
if (userInput == 1) {
votesConverted[0] = ++votesConverted[0];
}
else if (userInput == 2) {
votesConverted[1] = votesConverted[1]++;
}
else if (userInput == 3) {
votesConverted[2] = votesConverted[2]++;
}
else if (userInput == 4) {
votesConverted[3] = votesConverted[3]++;
}
else if (userInput == 5) {
votesConverted[4] = votesConverted[5]++;
}
else if (userInput == 6) {
votesConverted[6] = votesConverted[6]++;
}
else if (userInput == 7) {
votesConverted[7] = votesConverted[7]++;
}
}
PrintWriter wF = new PrintWriter(resultFile);
while ( rF.hasNext()) {
wF.write(votesConverted[i]);
i++;
}
wF.flush();
wF.close();
} catch (IOException ex) {
Logger.getLogger(ProjectTesting.class.getName()).log(Level.SEVERE, null, ex);
}
return votesConverted;
}
答案 0 :(得分:0)
这样的覆盖不起作用-打开文件进行写入时,实际上将其清空。打开文件进行追加时不会发生这种情况,但这似乎并不是您想要的。您需要写入另一个文件,然后最后删除原始文件,然后将新文件移到其位置。
答案 1 :(得分:0)
您的问题在于此循环:
while ( rF.hasNext()) {
wF.write(votesConverted[i]);
i++;
}
上一个循环rF.hasNext()
中的虚假消息。
...
while (rF.hasNext()) {
partyVotes = rF.next();
votesArray[i]= partyVotes;
....
所以没有什么可写的。相反,您可以尝试:
i=0;
while ( i<7) {
wF.write(votesConverted[i]);
i++;
}