Java 使用setter向arraylist添加值

Java 使用setter向arraylist添加值,java,logic,Java,Logic,Arraylist未采用正确的用户输入。我希望数组存储学生的姓名,然后是id, 所以输出应该是[boris,22]。 但这是我收到的输出 输入学生姓名boris [鲍里斯] 输入ID22 [鲍里斯,鲍里斯] 我知道我可以给用户输入分配一个变量并将其添加到ArrayList中,但我想使用setter来完成这项工作 import java.util.ArrayList; import java.util.Scanner; import java.util.List; public class st

Arraylist未采用正确的用户输入。我希望数组存储学生的姓名,然后是id, 所以输出应该是[boris,22]。 但这是我收到的输出

输入学生姓名boris

[鲍里斯]

输入ID22

[鲍里斯,鲍里斯]

我知道我可以给用户输入分配一个变量并将其添加到ArrayList中,但我想使用setter来完成这项工作

import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;

public class studentTest {

    public static void main(String[] args) {

        ArrayList<Student> storage = new ArrayList<Student>(); 
        Scanner input = new Scanner(System.in);

        Student obj3 = new Student();

        System.out.print("Enter Student name ");

        obj3.setName(input.nextLine());
        storage.add(obj3);
        System.out.print(storage);
        System.out.print("Enter ID ");
        obj3.setID(input.nextInt());
        storage.add(obj3);

        System.out.print(storage);
    }
}

public class Student {

    private  String  name;
    private int ID;
    private double grade;
    private int test;
    private int NUM_Tests;

    public Student() {
        name = "unassigned";
        ID = 0;
        grade = 0;
        test = 0;
        NUM_Tests = 0;
    }

    public  void setName(String N) { 
        name = N;   
    }
    public String getName() {
        return name;
    }
    public void setID(int I) {
        ID = I;
    }
    public int getID() {
        return ID;
    }

    public String toString() { 
        return String.format(name,ID);
    }
}
import java.util.ArrayList;
导入java.util.Scanner;
导入java.util.List;
公开课学生测验{
公共静态void main(字符串[]args){
ArrayList存储=新建ArrayList();
扫描仪输入=新扫描仪(System.in);
学生obj3=新学生();
系统输出打印(“输入学生姓名”);
obj3.setName(input.nextLine());
存储。添加(obj3);
系统输出打印(存储);
系统输出打印(“输入ID”);
obj3.setID(input.nextInt());
存储。添加(obj3);
系统输出打印(存储);
}
}
公立班学生{
私有字符串名称;
私有int-ID;
私人双年级;
私人智力测验;
私有整数测试;
公立学生(){
name=“未分配”;
ID=0;
等级=0;
测试=0;
NUM_测试=0;
}
public void setName(字符串N){
name=N;
}
公共字符串getName(){
返回名称;
}
公共无效集合ID(int I){
ID=I;
}
公共int getID(){
返回ID;
}
公共字符串toString(){
返回String.format(名称、ID);
}
}

在学生课堂上更改为字符串:
返回String.format(名称、ID)应该是
返回字符串。格式(“%s%d”,名称,ID)

  • 埃利奥特提供
并删除第一个
存储。添加(obj3)
,这是导致重复的原因

  • 由气垫船和Azro提供

    • 您的代码如下:

      import java.util.ArrayList;
      import java.util.Scanner;
      import java.util.List;
      
      public class studentTest {
      
          public static void main(String[] args) {
      
              List<Student> storage = new ArrayList<>(); 
              Scanner input = new Scanner(System.in);
      
              Student student;
      
              System.out.println("Create student. Type 0 to exit!");
      
              while(input.nextLine() != "0") {
      
                  student = new Student();
      
                  System.out.print("Enter the name: ");
                  student.setName(input.nextLine());
      
                  System.out.print("Enter ID: ");
                  student.setID(input.nextInt());
      
                  storage.add(student);
              }
      
              for (Student s: storage) {
                  System.out.print( s.toString() );
              }
          }
      }
      
      public class Student {
      
          private String name;
          private int ID;
          private double grade;
          private int test;
          private int NUM_Tests;
      
          //Constructor
          public Student() {
      
              name = "unassigned";
              ID = 0;
              grade = 0;
              test = 0;
              NUM_Tests = 0;
          }
      
          //Getter and Setter
          //.....
          //.....
      
          public String toString() {
              String s = "Student info ----\n" + 
                  "Name: " + this.name + "\n" + 
                      "ID: " + this.ID + "\n" +
                          "---------------\n";
              return s;
          }
      }
      
      import java.util.ArrayList;
      导入java.util.Scanner;
      导入java.util.List;
      公开课学生测验{
      公共静态void main(字符串[]args){
      列表存储=新建ArrayList();
      扫描仪输入=新扫描仪(System.in);
      学生;
      System.out.println(“创建学生。键入0退出!”);
      while(input.nextLine()!=“0”){
      学生=新学生();
      System.out.print(“输入名称:”);
      student.setName(input.nextLine());
      系统输出打印(“输入ID:”);
      setID(input.nextInt());
      存储。添加(学生);
      }
      用于(学生s:存储){
      System.out.print(s.toString());
      }
      }
      }
      公立班学生{
      私有字符串名称;
      私有int-ID;
      私人双年级;
      私人智力测验;
      私有整数测试;
      //建造师
      公立学生(){
      name=“未分配”;
      ID=0;
      等级=0;
      测试=0;
      NUM_测试=0;
      }
      //接二连三
      //.....
      //.....
      公共字符串toString(){
      字符串s=“学生信息----\n”+
      “名称:”+this.Name+“\n”+
      ID:“+this.ID+”\n+
      “-------------\n”;
      返回s;
      }
      }
      

      使用此代码,您可以在
      列表中插入多个学生。如果要停止创建用户,请键入
      0
      。之后,所有学生将以时尚风格显示。

      私有静态字符串名称???该字段绝对不应该是静态的,任何getter或setter都不应该删除学生课堂上所有的
      静态的
      ,请再次测试并告诉我们;)此外,无需将obj3重新添加到列表中。您已经添加了一次,这就足够了
      返回String.format(name,ID)应该是
      返回字符串。格式(“%s%d”,名称,ID)好的代码更新了,没有静态数据,还是一样的问题。