简介
本文主要目的是编写一个StudenTest对象,实现一下几个功能:
创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
一:打印出3年级(state值为3)的学生信息。
二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
新建对象
package com.atguigu.cntact;
public class StudentTest {
public static void main(String[] args) {
Student[] stus = new Student[20];
for(int i = 0;i < stus.length;i++){
stus[i] = new Student();
stus[i].number = (i + 1);
stus[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);
stus[i].score = (int)(Math.random() * (100 - 0 + 1));
}
for(int i = 0;i <stus.length;i++){
System.out.println(stus[i].info()); 用Alt+
}
System.out.println("********************");
for(int i = 0;i <stus.length;i++){
if(stus[i].state == 3){
System.out.println(stus[i].info());
}
}
System.out.println("********************");
}
}
class Student{
int number;
int state;
int score;
public String info(){
return "学号:" + number + ",年级:" + state + ",成绩:" + score;
}
}
代码解释
代码的运行结果为
学号:1,年级:3,成绩:70
学号:7,年级:3,成绩:30
学号:18,年级:3,成绩:45
Math.random()
Math.random()默认产生大于等于0.0且小于1.0之间的随机double型随机数
即:0.0<=Math.random()<1.0
但是稍加处理就可以产生任意随机数
stus[i] = new Student();
stus[i].number = (i + 1);
student[]数组本身就是一个引用数据类型,数组的元素是一个类,即自定义的引用数据类型.给stus[i]赋值肯定是stus类的对象,既然是对象,就必须new一个出来
public class MathRandom {
public static int getRandomInt(int num1,int num2)
{
int n=num1+(int)(Math.random()*(num2-num1));
return n;
}
public static char getRandomChar(char ch1,char ch2)
{
char ch=(char) (ch1+ Math.random()*(ch2-ch1+1));
return ch;
}
public static void main(String args[])
{
System.out.println(MathRandom.getRandomInt(1,7));
System.out.println(MathRandom.getRandomChar('a','b'));
}
}
加一个(int)是强制类型转换,截断。所以年级state要多加一个1,把六点几的年纪阶段成六年级.
冒泡排序
代码如下
for(int i = 0;i < stus.length - 1;i++){
for(int j = 0;j < stus.length - 1 - i;j++){
if(stus[j].score > stus[j + 1].score){
Student temp = stus[j];
stus[j] = stus[j + 1];
stus[j + 1] = temp;
}
}
}
外层的for循环指代的是冒泡排序的次数,n个数据会比较n-1次,第一次找出最大值,第二次找出次大值;内层的for循环指的是每一次排序要比较的次数,外层每找出一个最大值,内层都会少比较一次.