Java 使用setter向arraylist添加值
Arraylist未采用正确的用户输入。我希望数组存储学生的姓名,然后是id, 所以输出应该是[boris,22]。 但这是我收到的输出 输入学生姓名boris [鲍里斯] 输入ID22 [鲍里斯,鲍里斯] 我知道我可以给用户输入分配一个变量并将其添加到ArrayList中,但我想使用setter来完成这项工作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
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)代码>好的代码更新了,没有静态数据,还是一样的问题。