Java 在文件读取满足条件时退出while循环

Java 在文件读取满足条件时退出while循环,java,file,Java,File,下面是我在其中读取两列文件的程序。i、 名字和第二个是投票。我正在阅读每一行,当用户输入的名称满足条件时,即如果文件中存在名称,则提示您已投票,不能再次投票。它确实搜索记录,但不知何故,直到完成文件中的总行数,它才退出 另外,如何计算第二栏的总投票数。假设该列中有两种类型的“是”和“否”,如何计算“是”和“否”的总数并进行比较 提前谢谢你的帮助 package samples; import homework.EmployeeA; import java.io.BufferedWriter;

下面是我在其中读取两列文件的程序。i、 名字和第二个是投票。我正在阅读每一行,当用户输入的名称满足条件时,即如果文件中存在名称,则提示您已投票,不能再次投票。它确实搜索记录,但不知何故,直到完成文件中的总行数,它才退出

另外,如何计算第二栏的总投票数。假设该列中有两种类型的“是”和“否”,如何计算“是”和“否”的总数并进行比较

提前谢谢你的帮助

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次。希望你能现在不是我的问题。