Как я могу искать информацию из файла с именами, используя ввод (Java)? - PullRequest
0 голосов
/ 10 декабря 2018

(Я скопировал весь код, но вы просто должны просмотреть строки 28–45). Мы должны ввести фамилию и имя, чтобы получить количество голосов, которое набрал реальный человек.Я написал код, и если я ввожу на входе первую строку, фамилия имя, он работает хорошо (я получаю 19, что на правильное число), но каждый раз, когда я пытаюсь написать другое имя в поле ввода, это неработа.

Внутри файла есть 5 cloumns, (1-й и 5-й не нужны в этой задаче)у нас есть имена.

kepviselok.txt

ожидаемый и фактический результат

    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 голосов
/ 11 декабря 2018

Посмотрите на ваш код, в последнем цикле у вас есть условие if-else, и это условие завершит цикл, если имя первого кандидата не равно (else выполнено, и у вас есть break внутри него) или этоусловие завершит цикл, потому что вы нашли кандидата в первой строке (блок if выполнен).Это означает, что вы проверяете только первую запись в своем списке, а затем цикл завершается, потому что выполняется блок if или else.

Таким образом, правильное решение будет выводить печать "No candidate with this name" за пределы цикла, если выне нашел кандидата (для этого я добавил переменную boolean candidateFound), потому что только после проверки всего списка вы можете утверждать, что:

boolean candidateFound = false;
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);

        candidateFound = true;
        break;
    }
}

if (!candidateFound) {
    System.out.println("No candidate with this name");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...