如何使用输入(java)从具有名称的文件中搜索信息?

时间:2018-12-10 20:03:31

标签: java file input

(我复制并粘贴了整个代码,但是您只需要查看第28至45行) 我们必须输入姓和名才能获得实际人的票数。 我写了一个代码,如果我在输入中输入第一行的名字,firstname可以很好地工作(我得到19,这是正确的数字),但是每次当我尝试在输入字段中写另一个名字时,它都不会工作。

在文件内部有5个cloumns,(此问题中不需要1和5) 2.cloumn我们有一个人得到的票 3.column我们有姓,显然在4.cloumn中我们有名字。

kepviselok.txt

expected and actual output

    package erettsegi2;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {
        var lista = Files.readAllLines(Paths.get("kepviselok.txt"));
        var listak = new ArrayList<Lista>();
        var input = new Scanner(System.in);

        for (var valaszt : lista) {
            String[] split = valaszt.split(" ");
            var kerSzam = Integer.parseInt(split[0]);
            var szavazottSzam = Integer.parseInt(split[1]);
            var nev = split[2] + " " + split[3];
            var part = split[4].equals("-") ? "Independent " : split[4];

            listak.add(new Lista(kerSzam, szavazottSzam, nev, part));
        }
        System.out.println("2.");
        System.out.println("Number of Representatives on Election: " + listak.size());

        System.out.println("3.\nPlease write a surname!");
        var surname = input.nextLine();
        System.out.println("Please write a first name!");
        var firstname = input.nextLine();

        for (var i = 0; i < listak.size();i++) {
            var actualCandidate = listak.get(i);

            if (actualCandidate.name.equals(surname + " " + firstname)) {
                System.out.println(actualCandidate.name);
                System.out.println("Number of votes " + actualCandidate.votes);
                break;
            } else {
                System.out.println("No candidate with this name");
                break;
            }
        }

    }

    static class Lista {
        int sorszam;
        int votes;
        String name;
        String part;

        public Lista(int sorszam, int szavazatokSzama, String nev, String part) {
            this.sorszam = sorszam;
            this.votes = szavazatokSzama;
            this.name = nev;
            this.part = part;
        }

    }
}

1 个答案:

答案 0 :(得分:0)

看一下代码,在最后一个循环中,您有条件if-else,如果第一个候选名称不相等(执行了else,并且您有{{1} })或此条件将结束循环,因为您在第一行(执行了break块)中找到了候选对象。这意味着您只检查列表的第一项,然后由于执行了ifif块而结束了循环。

因此,正确的解决方案是在尚未找到候选者的情况下将else的打印移到周期外(为此我添加了"No candidate with this name"变量),因为只有在检查了整个列表之后,您才能声明:

boolean candidateFound