从文本文件(java)中读取和打印基于性别的特定行

问题描述 投票:0回答:1

我要做的是在文本文件中挑选出某些行,并根据文本文件中人物的性别分别打印出来。该订单中包含ID,名称,性别和年龄。

来自文本文件(男性)的示例行:1 John m 18 文本文件中的示例行(女):3 Susan f 21

这是我到目前为止的代码。

import java.util.*;
import java.io.*;



class person {
String id;
String name;
String gender;
int age;
  }

public class arrayList3 {

 public static void main(String[] args) throws FileNotFoundException {

    Scanner input = new Scanner(new File("student.txt"));
    ArrayList<person> studentList = new ArrayList<>(); //all types

    while(input.hasNextLine()) {
        person p = new person();
        p.id = input.next();
        p.name = input.next();
        p.gender = input.next();
        p.age = input.nextInt();
        studentList.add(p);
      }
   //prints list of female students
   System.out.println("== Female Student List ==");
    for (int k = 0; k < studentList.size(); k++){
        if(studentList.contains("f")){

            System.out.println(studentList.get(k).id +" "+ studentList.get(k).name +" "+ studentList.get(k).gender +" "+ studentList.get(k).age);
        }

    } 
   System.out.println();

   //prints list of male students
   System.out.println("== Male Student List ==");
    for (int k = 0; k < studentList.size(); k++){

        System.out.println(studentList.get(k).id +" "+ studentList.get(k).name +" "+ studentList.get(k).gender +" "+ studentList.get(k).age);

    } 
    input.close();
}


}

我尝试为女学生名单使用if语句,但是没有打印任何内容。对于男学生名单,它只打印整个文本文件,而不仅仅是打印男学生。

java file
1个回答
0
投票

肖恩,

你的for循环包含这一行:

if(studentList.contains("f")){

但studentList的定义如下:

ArrayList<person> studentList = new ArrayList<>();

您的上述if语句永远不应该求值为true,因为“f”是一个String,并且它与列表的内容类型不同。

假设person.gender的“f”是你试图过滤的,对你的程序最简单的改变就是用上面的if语句代替:

if("f".equals(studentList.get(k).gender)){
© www.soinside.com 2019 - 2024. All rights reserved.