我正在编写一个程序,该程序读取包含有关人的信息的txt文件(按此顺序:[姓氏] [名称] [出生年份] [性别]),然后打印特定年龄的人(女人60或65岁以上的男性)。 txt文件如下所示:
Stewart John 1940 m
Mary Jane 1940 k
这是程序:
public class Main3 {
public static void main(String[] args) {
ArrayList<String> outList = new ArrayList<>();
final int year = 2018;
Scanner scan = new Scanner(System.in);
Path path = Paths.get("zadanie3.txt");
try {
for (String line : Files.readAllLines(path)) {
String[] tab = line.split(" ");
if (tab[3].equals("m")) {
if (year - (Integer.parseInt(tab[2])) >= 65) {
outList.add(line);
}
if (tab[3].equals("k")) {
if (year - (Integer.parseInt(tab[2]) ) >= 60) {
outList.add(line);
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(outList);
}
}
它应该从txt文件中打印有关两个人的信息(因为他们都是我要寻找的年龄),但它只会打印第一个。从我在debbuger中看到的某些原因来看,该程序仅检查第一个i语句,然后退出而不检查第二个。您有任何想法如何使其工作吗?
答案 0 :(得分:3)
您似乎偶然地嵌套了if
语句。
尝试一下:
public class Main3 {
public static void main(String[] args) {
ArrayList<String> outList = new ArrayList<>();
final int year = 2018;
Scanner scan = new Scanner(System.in);
Path path = Paths.get("zadanie3.txt");
try {
for (String line : Files.readAllLines(path)) {
String[] tab = line.split(" ");
if (tab[3].equals("m")) {
if (year - (Integer.parseInt(tab[2])) >= 65) {
outList.add(line);
}
} else if (tab[3].equals("k")) {
if (year - (Integer.parseInt(tab[2]) ) >= 60) {
outList.add(line);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(outList);
}
}
因此您的代码实际上已经在确定性别为"k"
之后检查性别是否为"m"
。