从文件中打印特定年龄的人

时间:2018-07-26 21:34:01

标签: java nio

我正在编写一个程序,该程序读取包含有关人的信息的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语句,然后退出而不检查第二个。您有任何想法如何使其工作吗?

1 个答案:

答案 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"