我真的很困惑如何访问一个特定学生的年龄,学生的所有信息都存储在一个文本文件中.我正在读取文本文件并将信息存储到一个学生对象中,只需要访问此文件的帮助.

public class Student {
    private String lName;
    private int idNumber;
    private int age;

    public Student() {
        lName = "";
        idNumber = 0;
        age = 0;
    }
    public Student(String l, int i, int a) {
        lName = l;
        idNumber = i;
        age = a;
    }

    public void setName(String last) {
        lName = last;
    }

    public String getName() {
        return lName;
    }

    public void setIdNum(int num) {
        idNumber = num;
    }

    public int getIdNum() {
        return idNumber;
    }

    public void setAge(int a) {
        age = a;
    }

    public int getAge() {
        return age;
    }
}

我的文本文件看起来像这样:这些信息存储在并行数组列表中.我不太明白如何将其实现到一个对象中,从而将其传递到我的第二个承包方法中.

  Josh          2134         19
  Smith         5256         21
  Rogers        9248         19
  Andrew        7742         20

以下是我try 过的;

public static void main(String[] args) {
    String file = "studentData.txt";
    Scanner reader = new Scanner(file);

    ArrayList<Student> users = readFile(file);
    Student s = new Student();
    users.add(s);


    Scanner input = new Scanner(System.in);
    //user enters idNumber to display age
    System.out.println("Enter ID Number"); //exception handling to be added
    int idNum = input.nextInt();

//this part is where I'm stuck 
    for(int i = 0; i < users.get(i) i++){
    if(idNum == users.get(i)){
     users.setAge(i);
}
}
     System.out.println(users.getAge());

}
//METHOD FOR READING FILE
 public static ArrayList<Student> readFile(String file)throws IOException{
    Scanner reader = new Scanner(new File(file));

    ArrayList<Student> list = new ArrayList<Student>();//creates ArrayList with student object

    reader.nextLine();//skips first line
    while(reader.hasNext()){//splits all text in the file into words
      String lName = reader.next();
      int idNum = reader.nextInt();
      int age = reader.nextInt();
      
    Student users = new Student(lName ,idNum, age); 
     list.add(users);
    }
    
   return list;

}//end method

我认为解决这个问题的唯一方法是读取文件3次,将名称、idnum和年龄存储在单独的ArrayList中.然后使用这个单独的数组列表来存储年龄.得到(我).我相信那是非常不必要的??

推荐答案

你可以像这样把方法连在一起.

      for(int i = 0; i < users.size(); i++){
         if(idNum == users.get(i).getIdNum()){
            final Student temp = users.get(i);
            System.out.println("Student with an ID of " + temp.getIdNum() + " has an age of " + temp.getAge());
         }
      }

在这里,我链接users.get(i)以获取索引i处的Student,然后我调用getIdNum(),它从我刚刚获取的Student中获取ID.

然后,我进行==次比较-->;用户输入的ID是否与我正在查看的Student中的ID相同?

如果结果为真,那么我再次调用users.get(i),它再次获取相同的Student,然后我将其存储到名为temp的临时Student变量中.temp现在引用ArrayList上通过ID判断的Student.

然后,我取temp,使用它拥有的getIdNum()getAge()方法(因为tempStudent的一个实例,而Student拥有这些方法),并使用它们创建一条消息,打印到命令行上.

下面是一个完整的、可运行的示例.

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class SOQ_20220514
{

   public static class Student {
      private String lName;
      private int idNumber;
      private int age;
   
      public Student() {
         lName = "";
         idNumber = 0;
         age = 0;
      }
      public Student(String l, int i, int a) {
         lName = l;
         idNumber = i;
         age = a;
      }
   
      public void setName(String last) {
         lName = last;
      }
   
      public String getName() {
         return lName;
      }
   
      public void setIdNum(int num) {
         idNumber = num;
      }
   
      public int getIdNum() {
         return idNumber;
      }
   
      public void setAge(int a) {
         age = a;
      }
   
      public int getAge() {
         return age;
      }
   }

   public static void main(String[] args) throws IOException {
      String file = "studentData.txt";
      Scanner reader = new Scanner(file);
   
      ArrayList<Student> users = readFile(file);
      Student s = new Student();
      users.add(s);
   
   
      Scanner input = new Scanner(System.in);
    //user enters idNumber to display age
      System.out.println("Enter ID Number"); //exception handling to be added
      int idNum = input.nextInt();
   
   //this part is where I'm stuck 
      for(int i = 0; i < users.size(); i++){
         if(idNum == users.get(i).getIdNum()){
            final Student temp = users.get(i);
            System.out.println("Student with an ID of " + temp.getIdNum() + " has an age of " + temp.getAge());
         }
      }
   
   }
//METHOD FOR READING FILE
   public static ArrayList<Student> readFile(String file)throws IOException{
      Scanner reader = new Scanner(new File(file));
   
      ArrayList<Student> list = new ArrayList<Student>();//creates ArrayList with student object
   
      reader.nextLine();//skips first line
      while(reader.hasNext()){//splits all text in the file into words
         String lName = reader.next();
         int idNum = reader.nextInt();
         int age = reader.nextInt();
      
         Student users = new Student(lName ,idNum, age); 
         list.add(users);
      }
    
      return list;
   
   }//end method

}

Java相关问答推荐

基于仅存在于父级中的字段查询子文档?

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

是否需要关闭Executors返回的执行器.newVirtualThreadPerTaskExecutor()?

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

如果一个子类没有构造函数,超类也没有构造函数,那么为什么我可以构造子类的实例呢?

使用标记时,场景大纲不在多个线程上运行

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

只需最少的代码更改即可将版本号标记添加到日志(log)

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

如何使用值中包含与号的查询参数创建一个java.net.URI

测试容器无法加载类路径初始化脚本

Spring Security不允许加载js

WebSockets和Spring Boot安全性出现错误401

如何用内置Java从JavaFX应用程序中生成.exe文件?

如何生成指定范围内的11位序列号?

JavaFX,GridPane:在GridPane的列中生成元素将保持所有列的宽度

通过/失败的参数化junit测试方法执行数

ExecutorService:如果我向Executor提交了太多任务,会发生什么?

有没有办法仅将 JComboBox 中的选定项目居中(因此保持组合框中的所有项目左对齐)