java的学习笔记(资料来源自尚硅谷)
- 简介
- 新建对象
- 代码解释
- 冒泡排序
简介
本文主要目的是编写一个StudenTest对象,实现一下几个功能:
创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
一:打印出3年级(state值为3)的学生信息。
二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
新建对象
package com.atguigu.cntact;
public class StudentTest {
public static void main(String[] args) {
//声明Student类型的数组,声明对象类型的数组时,后面要加上[],这儿是动态赋值方式
Student[] stus = new Student[20]; //String[] arr = new String[10];
for(int i = 0;i < stus.length;i++){
//给数组元素赋值
stus[i] = new Student();
//给Student对象的属性赋值
stus[i].number = (i + 1);
//年级:[1,6]
stus[i].state = (int)(Math.random() * (6 - 1 + 1) + 1); //因为这儿有截断,因此把六点几转换成六,要多加个1
//成绩:[0,100]
stus[i].score = (int)(Math.random() * (100 - 0 + 1));
}
//遍历学生数组
for(int i = 0;i <stus.length;i++){
// System.out.println(stus[i].number + "," + stus[i].state
// + "," + stus[i].score);
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());
//Eclipse环境中,输入syso按Alt+/,能够有提示,/必须是shift旁的那个,不能是小键盘那个,否则不起作用,注释按键ctrl+/也必须是该斜线
}
}
System.out.println("********************");
}
}
class Student{
int number;//学号
int state;//年级
int score;//成绩
//显示学生信息的方法
public String info(){
return "学号:" + number + ",年级:" + state + ",成绩:" + score;
}
}
代码解释
代码的运行结果为
学号:1,年级:3,成绩:70
学号:2,年级:2,成绩:30
学号:3,年级:6,成绩:83
学号:4,年级:6,成绩:100
学号:5,年级:6,成绩:56
学号:6,年级:4,成绩:32
学号:7,年级:3,成绩:30
学号:8,年级:6,成绩:2
学号:9,年级:5,成绩:67
学号:10,年级:4,成绩:96
学号:11,年级:6,成绩:27
学号:12,年级:2,成绩:93
学号:13,年级:4,成绩:65
学号:14,年级:4,成绩:0
学号:15,年级:4,成绩:98
学号:16,年级:2,成绩:76
学号:17,年级:2,成绩:82
学号:18,年级:3,成绩:45
学号:19,年级:6,成绩:24
学号:20,年级:5,成绩:25
学号:1,年级:3,成绩:70
学号:7,年级:3,成绩:30
学号:18,年级:3,成绩:45
左边是栈,右边是堆,stus在栈内,堆new了一个数组,长度是20,每个位置的值是null,接下来才给每个位置的值赋值.
先建立一个student对象,分别建立int的学号年纪成绩,在new对象后,系统是默认给该对象属性赋值为0的。
然后在该对象内创建一个方法,方便在主函数中直接调用student对象方法。
ps:堆内数组赋值完后,存放的是对象的地址,指向堆空间该对象的属性和方法.
Math.random()
Math.random()默认产生大于等于0.0且小于1.0之间的随机double型随机数
即:0.0<=Math.random()<1.0
但是稍加处理就可以产生任意随机数
link
stus[i] = new Student();
//给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)); //产生的随机数包括1,不包括7
System.out.println(MathRandom.getRandomChar('a','b'));//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对象!!!
Student temp = stus[j];
stus[j] = stus[j + 1];
stus[j + 1] = temp;
}
}
}
外层的for循环指代的是冒泡排序的次数,n个数据会比较n-1次,第一次找出最大值,第二次找出次大值;内层的for循环指的是每一次排序要比较的次数,外层每找出一个最大值,内层都会少比较一次.