Java 集合 03 综合练习(黑马)

练习1、

Java 集合 03 综合练习(黑马)_第1张图片

 ps:输出结果为地址值,是因为在输出对象时,默认调用了对象的toString()方法。在没有重写toString()方法的情况下,toString()方法返回的是对象的地址值。如果想要输出对象的属性值而不是地址值,可以重写toString()方法。

Java 集合 03 综合练习(黑马)_第2张图片

Java 集合 03 综合练习(黑马)_第3张图片

可以改为这样:

Java 集合 03 综合练习(黑马)_第4张图片

代码:

import java.util.ArrayList;
public class  practice {
    public static void main(String[] args) {
        //定义一个集合
        ArrayList list = new ArrayList<>();
        //创建学生对象
        Student s1 = new Student("zhangsan",19);
        Student s2 = new Student("lisi",20);
        Student s3 = new Student("wangwu",10);
        Student s4 = new Student("xiaoliu",18);

        //添加元素
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        //遍历集合
        for(int i=0;i< list.size();i++){
            Student stu = list.get(i);
            System.out.println(stu.getName()+","+stu.getAge());
        }
    }
}

结果:

Java 集合 03 综合练习(黑马)_第5张图片

练习2、

Java 集合 03 综合练习(黑马)_第6张图片

问题1、没有执行添加的循环,最后集合长度为0;

Java 集合 03 综合练习(黑马)_第7张图片

Java 集合 03 综合练习(黑马)_第8张图片

因为集合的长度一开始为0;所以size方法返回的for里面的就为0,如下图所示,相当于第一次循环就不执行,循环没有执行;

Java 集合 03 综合练习(黑马)_第9张图片

所以改为固定的数字即可;

Java 集合 03 综合练习(黑马)_第10张图片

问题2、如果将Student s = new Student();放在循环外面,会出现全部被最后一个人替代的问题:

Java 集合 03 综合练习(黑马)_第11张图片

Java 集合 03 综合练习(黑马)_第12张图片

原因是:第一次创建学生对象后,地址是0x0011,将zhangsan 23复制进去后,存储到集合中,接下来并没有再次创建对象,所以还是对同一个对象赋值,变为lisi 24,再将0x0011放进集合中,最后输入的是wangwu 25,仍然是对这个对象赋值,所以,存入集合中的是三个一样的地址都是0x0011,所以指向的都是同一个对象,所以输出的都是wangwu 25;

Java 集合 03 综合练习(黑马)_第13张图片

正确的是这样的:

Java 集合 03 综合练习(黑马)_第14张图片

自己写的代码:(冗余)

import java.util.Scanner;
import java.util.ArrayList;
public class  practice {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //定义一个集合
        ArrayList list = new ArrayList<>();
        //创建学生对象
        Student s1 = new Student();
        Student s2 = new Student();
        Student s3 = new Student();

        System.out.println("输入第一个同学的名字:");
        String n1 = input.next();
        s1.setName(n1);
        System.out.println("输入第二个同学的名字:");
        String n2 = input.next();
        s2.setName(n2);
        System.out.println("输入第三个同学的名字:");
        String n3 = input.next();
        s3.setName(n3);
        System.out.println("输入第一个同学的年龄:");
        int a1 = input.nextInt();
        s1.setAge(a1);
        System.out.println("输入第二个同学的年龄:");
        int a2 = input.nextInt();
        s2.setAge(a2);
        System.out.println("输入第三个同学的年龄:");
        int a3 = input.nextInt();
        s3.setAge(a3);

        //添加元素
        list.add(s1);
        list.add(s2);
        list.add(s3);
        //遍历集合
        for(int i=0;i< list.size();i++){
            Student stu = list.get(i);
            System.out.println(stu.getName()+","+stu.getAge());
        }
    }
}
public class Student {
    //私有化成员变量
    private String name ;
    private int age;
    //空参构造
    public Student() {
    }
    //带全部参数的构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //get/set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

代码结果:Java 集合 03 综合练习(黑马)_第15张图片

你可能感兴趣的:(黑马Java,java,windows,开发语言)