(我复制并粘贴了整个代码,但是您只需要查看第28至45行) 我们必须输入姓和名才能获得实际人的票数。 我写了一个代码,如果我在输入中输入第一行的名字,firstname可以很好地工作(我得到19,这是正确的数字),但是每次当我尝试在输入字段中写另一个名字时,它都不会工作。
在文件内部有5个cloumns,(此问题中不需要1和5) 2.cloumn我们有一个人得到的票 3.column我们有姓,显然在4.cloumn中我们有名字。
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;
}
}
}
答案 0 :(得分:0)
看一下代码,在最后一个循环中,您有条件if-else
,如果第一个候选名称不相等(执行了else
,并且您有{{1} })或此条件将结束循环,因为您在第一行(执行了break
块)中找到了候选对象。这意味着您只检查列表的第一项,然后由于执行了if
或if
块而结束了循环。
因此,正确的解决方案是在尚未找到候选者的情况下将else
的打印移到周期外(为此我添加了"No candidate with this name"
变量),因为只有在检查了整个列表之后,您才能声明:
boolean candidateFound