Java初期学习题总结:一

本文详细解析了Java中冒泡排序算法的实现过程,包括外层循环控制趟数、内层循环控制元素比较,以及如何优化排序过程。通过具体代码示例,展示了如何对Student对象数组进行排序,涉及年龄和分数的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java初期学习中遇到的几个需要留意的题①

//外层循环控制趟数(元素数量n-1)
        for (int i = 1; i <LEN ; i++) {
//内层循环控制第i趟的元素的逐个的比较
//如果整个内层循环,里面的判断条件都不成立,那么意味着所有的相连的后面的元素都大于等于前面的
            //待排序区是一个有序的数列了,可以结束了。
            boolean flag = false;
            for (int j = 0; j < LEN - i; j++) {
/*内层的执行顺序就是外层循环每执行一次-1
当外层循环执行到第n次时,内层循环循环到n-1的时候就会停止,(即为每次都会排出一个最大的数:升序!)*/
                if(arr[j] > arr[j+1]){
                    int temp  = arr[j];//中间变量存值
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                    //用于对if条件后续的判断
                }
            }
            //如果flag 还是false,,意味着整个内层循环条件都没有成立
//            if(flag == false){//这样的写法具有安全隐患。
            //这样的写法是语法是对的,但是语义是不符合我们的要求的。条件永远是假。
//            if(flag = false){
            //这种可以,还不是最好的。
//            if(false == flag){
            if(!flag){//最好的写法
                break;
            }
        }

在Java初期学习中遇到的几个需要留意的题②

package com.bjsxt.oop6;

import java.util.Arrays;

public class TestSort {
    public static void main(String[] args) {
        test1();
    }
    public static void bubbleSort(Student[] arr){//调用外部方法的时候在形参中加入对父接口的形参Compara com
        final int LEN=arr.length;
        if(arr==null)return;
        if (LEN==0){
            System.out.println("数组长度为零");
            return;
        }
        for (int i=1;i<LEN;i++){
            boolean flag=false;
            for (int j=0;j<LEN-i;j++){
                if(arr[j].comparaTo(arr[j+1])>0){//调用外部方法的时候需要调整if语句的条件com.compara(arr[j],arr[j+1])
                    Student temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                    flag=true;
                }
            }
            if(!flag){
                break;
            }
        }
    }
    public static void test1(){
        Student[] arr= {
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100)),
                new Student(getRandomNum(10, 15), getRandomNum(60, 100))
        };
        System.out.println(Arrays.toString(arr));
        //Comparator com =new MyComparator();在调用外部接口的时候我们需要进行对接口的创建,父接口引用指向子类对象
        bubbleSort(arr);//外部接口的时候在原数组后面加入一个进行比对的数组数据
        System.out.println(Arrays.toString(arr));

    }
    public static int getRandomNum(int min,int max){
        return (int)(Math.random()*(max-min)+min);
    }
}

//外部比较器的接口和接口方法
/*interface Comparator{
    int compara(Object o1,Object o2);
}


class MyComparator implements Comparator{
    @Override
    public int compara(Object o1, Object o2) {
        Student s1=(Student)o1;
        Student s2=(Student)o2;
        int result=s1.getAge()-s2.getAge();
        if(result==0){
            result=s1.getScore()-s2.getScore();
        }
        return result;
    }
}*/

interface Comparable{
    int comparaTo(Object o);
}

class Student implements Comparable{//外部接口不需要对Student类进行对接,而是创建一个新的类,专门对接外部比较器
    private int age;
    private int score;

    public Student(int age, int score) {
        this.age = age;
        this.score = score;
    }

    public int getAge() {
        return age;
    }

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

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "\nStudent{" +
                "age=" + age +
                ", score=" + score +
                '}';
    }
    //只有在调用内部方法的时候我们才会去对内部方法进行接口的对接,并给出排序的逻辑计算
    @Override
    public int comparaTo(Object o) {
        Student s =(Student)o;
        int result=this.getAge()-s.getAge();
        if(result==0){
            result=this.getScore()-s.getScore();
        }
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值