请教:定义一个Student类,要求在程序中生成若干个Student对象,并将这些对象分别保存到ArrayList和HashSet中,然后遍历的输出出来。我这样

时间:2022-02-04 19:42:38
我这样写的
输出:
Student@35ce36
Student@757aef
Student@d9f9c3
Student@9cab16
Student@1a46e30
Student@3e25a5

我想要输出学生姓名如何实现???



import java.util.*;


public class Student {
String name;
Student(String setName){
name = setName;
}


public static void main(String []args){
Student Student1 = new Student("a");
Student Student2 = new Student("b");
Student Student3 = new Student("c");
Student Student4 = new Student("d");
Student Student5 = new Student("e");
Student Student6 = new Student("f");


List<Student> list = new ArrayList<Student>();
Set<Student> set = new HashSet<Student>();

list.add(Student1); 
list.add(Student2); 
list.add(Student3); 
list.add(Student4);
list.add(Student5);
list.add(Student6);

set.add(Student1); 
set.add(Student2); 
set.add(Student3); 
set.add(Student4);
set.add(Student5);
set.add(Student6);


for (int i = 0; i < list.size(); i++) {
Object m = (Student)list.get(i);
System.out.println(m);
}

}

}

6 个解决方案

#1


如果写成

for (int i = 0; i < list.size(); i++) {
            Object m = (Student)list.get(i);
            System.out.println(m.name);
            }

它会报错说m.name不是字段。。

#2


怎么没人来帮我啊。。新人啊,急需帮助。。 - -

#3


for (int i = 0; i < list.size(); i++) { 
            Student m = (Student)list.get(i); 
            System.out.println(m.name); 
            } 

#4


呵呵,那当然不能写成 m.name 了,因为 Object 并没有这个 name 字段啊

由于采用了向上转型,转型后的对象只能看到 Object 的东西。

因为你这个已经采用了泛型参数,也就是 List 后面加上了 <Student>,这样的话 list.get(i) 取出来的对象直接就是 Student 的,
并不需要再进行强制转换,这就是使用泛型参数带来的好处。

这样改一下就可以了:

for (int i = 0; i < list.size(); i++) {
    Student m = list.get(i);
    System.out.println(m.name);
}


如果没采用泛型参数,也就是不在 List 后面加 <Student> 的话,list.get(i) 取出来是个 Object 的对象,需要强制转换一下:

for (int i = 0; i < list.size(); i++) {
    Student m = (Student)list.get(i);
    System.out.println(m.name);
}


另外说一下,Student 类中的 name 建议设置成 private 的,并且提供 set/get 方法,养成好的习惯,以更好地进行封装。

#5


又见果子大哥~ 
           ----专业跟帖人员~

#6


引用 3 楼 knightzhuwei 的回复:
Java codefor (int i = 0; i < list.size(); i++) { 
            Student m = (Student)list.get(i); 
            System.out.println(m.name); 
            } 
问题解决了。。楼上的也做了解释,谢谢两位!

#1


如果写成

for (int i = 0; i < list.size(); i++) {
            Object m = (Student)list.get(i);
            System.out.println(m.name);
            }

它会报错说m.name不是字段。。

#2


怎么没人来帮我啊。。新人啊,急需帮助。。 - -

#3


for (int i = 0; i < list.size(); i++) { 
            Student m = (Student)list.get(i); 
            System.out.println(m.name); 
            } 

#4


呵呵,那当然不能写成 m.name 了,因为 Object 并没有这个 name 字段啊

由于采用了向上转型,转型后的对象只能看到 Object 的东西。

因为你这个已经采用了泛型参数,也就是 List 后面加上了 <Student>,这样的话 list.get(i) 取出来的对象直接就是 Student 的,
并不需要再进行强制转换,这就是使用泛型参数带来的好处。

这样改一下就可以了:

for (int i = 0; i < list.size(); i++) {
    Student m = list.get(i);
    System.out.println(m.name);
}


如果没采用泛型参数,也就是不在 List 后面加 <Student> 的话,list.get(i) 取出来是个 Object 的对象,需要强制转换一下:

for (int i = 0; i < list.size(); i++) {
    Student m = (Student)list.get(i);
    System.out.println(m.name);
}


另外说一下,Student 类中的 name 建议设置成 private 的,并且提供 set/get 方法,养成好的习惯,以更好地进行封装。

#5


又见果子大哥~ 
           ----专业跟帖人员~

#6


引用 3 楼 knightzhuwei 的回复:
Java codefor (int i = 0; i < list.size(); i++) { 
            Student m = (Student)list.get(i); 
            System.out.println(m.name); 
            } 
问题解决了。。楼上的也做了解释,谢谢两位!