对象数组练习

题目:

首先为学生创建个类,有三个属性

class student1{
    int num;
    int state;
    int score;
}

创建对象数组,格式为:类名 [] 数组名=new 类名[数组长度],采用动态方法创建数组

student1[] stu=new student1[20];

使用Random来产生随机数

import java.util.Random;
Random random=new Random();

为对象数组赋值,首先需要开辟新空间

 for(int i=0;i<stu.length;i++){
            stu[i]=new student1();      //为栈空间的对象赋值,在堆空间开辟新地址,把地址给stu[i]
            stu[i].num=(i+1);                           //给学号从1给
            stu[i].state=random.nextInt(7);      //给年级生成一个随机数,1-6
            stu[i].score=random.nextInt(101);     //给成绩成随机数,1-100
        }

再创建一个打印方法并调用

//打印数组内容
public static void print(student1[] stu){
        for(int i=0;i<stu.length;i++){
            System.out.println("学号:"+stu[i].num+"年级:"+stu[i].state+"成绩:"+stu[i].score);
        }
    }

调用方法

print(stu);   //调用方法,输出数组内容,将对象数组传过去,只需要数组名即可,传的是数组地址

输出所以三年级学生信息

 //输出三年级学生信息
    public static void print3(student1[] stu,int state){
        for(int i=0;i<stu.length;i++){
            if(stu[i].state==3){
                System.out.println("学号:"+stu[i].num+"年级:"+stu[i].state+"成绩:"+stu[i].score);
            }
        }
    }

调用方法

print3(stu,3);      //输出三年级的信息,传数组和年级,方法那里使用变量接收

按成绩进行冒泡排序

//冒泡排序,交换的不是成绩,而是每个对象
    public static void sort(student1[] stu){
        for(int i=0;i<stu.length-1;i++){
            for(int j=0;j<stu.length-1-i;j++){
                if(stu[j].score>stu[j+1].score){
                    student1 jh=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=jh;
                }
            }
        }
    }

内存中如下表示,交换的是栈空间的对象(包括三个属性全部交换),而不是堆空间的中某个具体的变量

调用方法

sort(stu);  调用排序
print(stu);最后输出看效果

程序输出结果

学号:1年级:4成绩:76
学号:2年级:3成绩:31
学号:3年级:5成绩:45
学号:4年级:1成绩:18
学号:5年级:4成绩:62
学号:6年级:0成绩:4
学号:7年级:0成绩:11
学号:8年级:3成绩:76
学号:9年级:1成绩:83
学号:10年级:4成绩:36
学号:11年级:1成绩:14
学号:12年级:4成绩:26
学号:13年级:1成绩:41
学号:14年级:1成绩:1
学号:15年级:1成绩:30
学号:16年级:5成绩:17
学号:17年级:3成绩:54
学号:18年级:2成绩:45
学号:19年级:2成绩:66
学号:20年级:1成绩:75
**********************
学号:2年级:3成绩:31
学号:8年级:3成绩:76
学号:17年级:3成绩:54
**********************
学号:14年级:1成绩:1
学号:6年级:0成绩:4
学号:7年级:0成绩:11
学号:11年级:1成绩:14
学号:16年级:5成绩:17
学号:4年级:1成绩:18
学号:12年级:4成绩:26
学号:15年级:1成绩:30
学号:2年级:3成绩:31
学号:10年级:4成绩:36
学号:13年级:1成绩:41
学号:3年级:5成绩:45
学号:18年级:2成绩:45
学号:17年级:3成绩:54
学号:5年级:4成绩:62
学号:19年级:2成绩:66
学号:20年级:1成绩:75
学号:1年级:4成绩:76
学号:8年级:3成绩:76
学号:9年级:1成绩:83

进程已结束,退出代码0

代码如下

package javaLei;
import java.util.Random;
public class javaTest {
    public static void main(String[] args) {
        student1[] stu=new student1[20];
        Random random=new Random();
        for(int i=0;i<stu.length;i++){
            stu[i]=new student1();      //为栈空间的对象赋值,在堆空间开辟新地址,把地址给stu[i]
            stu[i].num=(i+1);                           //给学号从1给
            stu[i].state=random.nextInt(7);      //给年级生成一个随机数,1-6
            stu[i].score=random.nextInt(101);     //给成绩成随机数,1-100
        }
        print(stu);                                //调用方法,输出数组内容
        System.out.println("**********************");
        print3(stu,3);                        //输出三年级的信息
        sort(stu);                                 //对数组排序
        System.out.println("**********************");
        print(stu);
    }
    //打印数组内容
    public static void print(student1[] stu){
        for(int i=0;i<stu.length;i++){
            System.out.println("学号:"+stu[i].num+"年级:"+stu[i].state+"成绩:"+stu[i].score);
        }
    }
    //输出三年级学生信息
    public static void print3(student1[] stu,int state){
        for(int i=0;i<stu.length;i++){
            if(stu[i].state==3){
                System.out.println("学号:"+stu[i].num+"年级:"+stu[i].state+"成绩:"+stu[i].score);
            }
        }
    }
    //冒泡排序
    public static void sort(student1[] stu){
        for(int i=0;i<stu.length-1;i++){
            for(int j=0;j<stu.length-1-i;j++){
                if(stu[j].score>stu[j+1].score){
                    student1 jh=stu[j];
                    stu[j]=stu[j+1];
                    stu[j+1]=jh;
                }
            }
        }
    }
}

class student1{
    int num;
    int state;
    int score;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值