Java学习第二天

本文详细介绍了编程中的方法定义与使用,包括方法的调用及参数传递,并深入探讨了一维和二维数组的定义、遍历与拷贝。同时,还讲解了递归算法和排序算法的基本概念。

本周学习了两个内容,一个是方法,一个是数组。
一.方法
1.方法的定义
修饰符 返回值类型 方法的名字(参数列表){
方法的功能主体
循环、判断、变量、比较、运算
return ;
}
修饰符:(由于我们还没有到面向对象,所以现在的写法为)public static
返回值类型:方法在运算后,返回结果的数据类型
方法的名字:自定义并满足标识符规范,名字首字母小写,后面各单词首字母大写
参数列表:传递数据类型,若多个用逗号隔开。参数列表中包含一个或多个变量的定义。
参数有两种:
形式参数(形参):在方法定义时用于接收外界输入的数据。
实际参数(实参):调用方法时实际传给方法的数据。
2.方法使用的注意事项
(1).方法不能定义在另一个方法里
(2).方法的名称严格区分大小写
(3).若方法的返回值是void,方法中可以省略return不写
(4).方法的返回值类型,和return后面的数据类型一致
3.调用方法
(1).直接调用:方法名(实参列表);
(2).类名调用:类名.方法名(实参列表);
(3).对象调用:对象.方法名(实参列表);(面向对象会使用)
4.方法调用中的参数传递问题
(1).方法参数是基本数据类型,则调用方法时,是传值
(2).方法参数是引用类型,则调用方法时,是传地址

二.数组
1.一维数组的定义
(1).数据类型[] 变量名=new 数据类型[存储元素的个数];
(2).数据类型[] 变量名=new 数据类型[]{元素1,元素2,元素3….};
(3).数据类型[] 变量名={元素1,元素2,元素3….};
数组的一个属性就是数组的长度,属性的名字length,使用属性:数组名.length
2.二维数组的定义
(1).数据类型[][] 变量名=new 数据类型[存储行元素的个数][存储列元素的个数];
(2).数据类型[][] 变量名={{元素1},{元素1,元素3….},{元素1,元素2,元素3….}};
二维数组的length属性就算它所含的“行的个数”
3.遍历数组
(1).for(数据类型 变量名称:数组名称){
}
(2).for(int i=0;i&It;array.length;i++){
system.out.println(array[i]);
}
4.数组拷贝
System类中有一个静态方法:
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
参数解释:
src: 源数组
srcPos: 源数组的起始位置
dest: 目标数组
destPos:目标数组的起始位置
length:拷贝的数组元素个数

三.递归算法和排序算法
递归调用指的是方法执行过程中出现该方法本身的调用。
递归算法的两个条件:(1).递归出口(结束条件)(2). 逐层递推向出口靠近.

例:作业4:兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,初始有一对小兔子,假设所有兔子都不死,计算前12个月每个月的兔子对数。

package twoweek;

public class HomeWorkFour {

    public static void main(String[] args) {
        int month=12;
        int x=Rabbit(month);
        System.out.println(month+"个月后共有"+x+"对兔子");
    }
    public static int Rabbit(int month){    
        if(month==1||month==2){
            return 1;
        }else{
            return Rabbit(month-1)+Rabbit(month-2);
        }
    }
}

排序算法:冒泡排序,插入排序,快速排序。
1.冒泡排序:共有n个数据,则需要进行n-1趟排序(可优化),每一趟排序都会通过“两两交换”的方式对数据进行比较,每一趟排序后都会将本趟排序的最大值“冒”到后面。

2.插入排序:对一个有n个元素的数据序列,排序需要进行n-1趟插入操作。
第一趟插入将第2个元素插入前面的有序子序列(此时前面只有一个元素)。
第二趟插入将第3个元素插入前面的有序子序列,前面两个元素是有序的。
第n-1趟插入将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。

3.快速排序:从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所有比它大的数据元素放到它的右边。接下来,对左右两个子序列按照上述方法进行递归排序,直到排序完成。

作业题:1:给定一个int类型的数组,要求:
1.求和
2.求平均数(int)
3.求最大值,最小值
4.打印这个数组中数据

package twoweek;

public class Homeworkone {

    public static void main(String[] args) {
        int [] arr={42,20,16,12,37,15,80};
        int cum=summation(arr);
        System.out.println("该数组的和为:"+cum);
        average(arr,cum);
        compare(arr);
        show(arr);
    }
    public static int summation(int[] a){
        int sum=0;
        for (int i = 0; i < a.length; i++) {
            sum+=a[i];
        }
        return sum;
    }
    public static void average(int[] a,int num) {
        int aver=num/a.length;
        System.out.println("平均值为:"+aver);
    }
    public static void compare(int[] a){
        int max=a[0],min=a[0];
        for (int i = 1; i < a.length; i++) {
            if(max<a[i]){
                max=a[i];
            }
            if(min>a[i]){
                min=a[i];
            }
        }
        System.out.println("最大值为:"+max+"   最小值为:"+min);
    }
    public static void show(int[] a){
        System.out.println("打印该数组:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println();
        System.out.println("排序后的该数组为:");
        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < a.length-i; j++) {
                if(a[j]>a[j+1]){
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }
}

2:给定两个整型数组a和b,找出其共同元素。
eg:int[] a={23,12,45,11};
int[] b={99,33,12,45,67,11}
要找出:12,45,11

package twoweek;

public class HomeWorkTwo {
    public static void main(String[] args){
        int[] a={23,12,45,11};
        int[] b={99,33,12,45,67,11};
        System.out.println("两数组相同的元素有:");
        for(int i=0;i<a.length;i++){
            for(int j=0;j<b.length;j++){
                if(a[i]==b[j]){
                    System.out.print(a[i]+"  ");
                    break;
                }
            }
        }
    }
}

3: 在某歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。
10位评委对某歌手的打分分别是:78、60、85、96、77、66、60、82、88、85。计算该歌手的最终得分。

package twoweek;

public class HomeWorkThree {

    public static void main(String[] args) {
        int[] a={78,60,85,96,77,66,60,82,88,85};
        average(a);
    }
    public static void average(int[] a) {
        int max=a[0],min=a[0],sum=0,end=0;
        for(int i=0;i<a.length;i++){
            if(max<a[i]){
                max=a[i];
            }
            if(min>a[i]){
                min=a[i];
            }
            sum+=a[i];
        }
        end=(sum-max-min)/(a.length-2);
        System.out.println("该选手去掉一个最高分:"+max+" 分,最低分:"+min+" 分,后的平均分为:"+end);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值