Java 在文件读取满足条件时退出while循环
下面是我在其中读取两列文件的程序。i、 名字和第二个是投票。我正在阅读每一行,当用户输入的名称满足条件时,即如果文件中存在名称,则提示您已投票,不能再次投票。它确实搜索记录,但不知何故,直到完成文件中的总行数,它才退出 另外,如何计算第二栏的总投票数。假设该列中有两种类型的“是”和“否”,如何计算“是”和“否”的总数并进行比较 提前谢谢你的帮助Java 在文件读取满足条件时退出while循环,java,file,Java,File,下面是我在其中读取两列文件的程序。i、 名字和第二个是投票。我正在阅读每一行,当用户输入的名称满足条件时,即如果文件中存在名称,则提示您已投票,不能再次投票。它确实搜索记录,但不知何故,直到完成文件中的总行数,它才退出 另外,如何计算第二栏的总投票数。假设该列中有两种类型的“是”和“否”,如何计算“是”和“否”的总数并进行比较 提前谢谢你的帮助 package samples; import homework.EmployeeA; import java.io.BufferedWriter;
package samples;
import homework.EmployeeA;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Votes {
public static void main(String[] args) {
File f = new File("E://Employee/votes.txt");
try {
Scanner s= new Scanner(f);
System.out.println("Is motion open for voting?. Press \n1: Yes\n2: No");
Scanner scan = new Scanner (System.in);
int choice = scan.nextInt();`enter code here`
while(s.hasNext())
{
String line = s.nextLine();
String temp[]= line.split(" ");
EmployeeA e = new EmployeeA("hiren", "yes");
e.name = temp[0];
e.vote = temp[1];
ArrayList<EmployeeA> list = new ArrayList<EmployeeA>();
list.add(e) ;
for (int i=0; i<list.size(); i++)
{
EmployeeA t= list.get(i);
if (choice==1)
{
System.out.println("Please enter your name to start voting");
String vname=scan.next();
if (t.name.equalsIgnoreCase(vname))
{
System.out.println("opps you have already voted once and you are not eligible to vote again");
}
else
{
System.out.println("Hey greate news");
}
}
if (choice==2)
{
{
System.out.println(" Please have patience till Motion is opened for voting");
}
}
StringBuffer sb = new StringBuffer("D://Employee/votes.txt");
try{
FileWriter fwriter = new FileWriter(f);
BufferedWriter bwriter = new BufferedWriter(fwriter);
bwriter.write(sb.toString());
bwriter.close();
}
catch (IOException e1){
e1.printStackTrace();
*/
}
}
if (choice==2)
{
{
System.out.println(" Please have patience till Motion is opened for voting");
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
包装样品;
导入作业.EmployeeA;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Scanner;
公众阶级投票{
公共静态void main(字符串[]args){
文件f=新文件(“E://Employee/vows.txt”);
试一试{
扫描器s=新扫描器(f);
System.out.println(“议案是否可以投票?.Press\n1:Yes\n2:No”);
扫描仪扫描=新扫描仪(System.in);
int choice=scan.nextInt();`在此处输入代码`
而(s.hasNext())
{
字符串行=s.nextLine();
字符串温度[]=行分割(“”);
雇员e=新雇员a(“hiren”,“yes”);
e、 name=temp[0];
e、 投票=临时[1];
ArrayList=新建ArrayList();
列表.添加(e);
对于(int i=0;i要在名称与现有条目匹配后退出读取文件,请使用'break'语句。在java中,break语句用于退出for循环(这是本例中所需的),并且由于文件中的条目是从循环内部读取的,因此它将退出读取文件。因此,将此代码部分修改为:
if (t.name.equalsIgnoreCase(vname))
{
System.out.println("opps you have already voted once and you are not eligible to vote again");
break; // This statement will exit the terminate the loop immediately
}
由于没有你提到的计算投票数的代码部分,我可以给你一个基本的代码算法,你应该能够很容易地实现
String line; // make this string hold each line in the file
int yes = 0, no = 0;
Scanner s = new Scanner(f) // Start reading from the top of the file
while (s.hasNext()) {
line = s.nextLine();
String[] values = line.split(" ");
String vote = values[1] // Assuming it is name followed by vote
if (vote.equalsIgnoreCase("No")) // Or you can directly use values[1].equalsIgnoreCase("No")
yes++;
else
no++;
}
// Now yes holds count of "Yes" votes and no holds count of "No" votes
如果您需要帮助,请修改格式。查看vots.txt也会很有用,可能会将代码裁剪到相关部分。Babubai是hiren否bob是samir是Canon否非常感谢您的回复。但问题是,它从第一行开始,即使在添加了break之后,也不会循环出现。正如您所说的(由于文件中的条目是从循环内部读取的,因此它将退出读取文件。因此将这段代码修改为:)我真的不知道,所以你能帮我理解吗?如果用户已经投票了,它会显示如上所述的消息,它应该退出循环。如果用户根本没有投票,条目将被添加到文本文件中,然后计算赞成票和反对票的总数。我不确定我是否理解你的问题,但我会尝试解释-break语句用于退出放置它的for循环。在您的例子中,for循环从文件的开头开始迭代(这是正确的,也是预期的)。当遇到名称匹配时,它基本上会终止for循环,从而停止对文件中条目的迭代,然后退出。查看代码时,似乎出现了逻辑错误-要添加条目(如果不存在,则添加到新文件中),请将FileWriter节放入打印的else块中“嘿,好消息"由于FileWriter部分当前在for循环块中,当遇到匹配时,for循环终止,这部分代码永远不会执行。嗨,Sunil,谢谢你,非常感谢你对这一点的快速响应。我确实使用break通过for循环退出了逻辑;但由于某种原因,我无法实现它我正在做的是(如果选项==1),我想输入用户名,当我输入用户名时,程序应该从文件中检查用户名是否存在。这里发生的是,当我输入用户名时,它从第1行开始搜索,假设输入的用户名在第6位,它不会给我答案,直到我继续输入相同的名称6次。希望你能现在不是我的问题。