Java方法练习

 需求1:设计一个方法用于数组遍历,要求遍历的结果是满足一下格式的:[11,22,33,44,55]

public class MethodDemo1 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        printArray(arr);
    }
    static void printArray(int[] arr){
        for (int i : arr) {
            System.out.println(i);
        }
    }
}

刚开始很容易写出来这样的代码,但是仔细一看却发现根本不能满足题目上的要求,于是进行修改,首先就是各个元素之间不换行并且用逗号分隔,那么就使用print语句输出元素并且和逗号进行拼接;然后就是数据的首和尾之间缺少方括号,那就加上。

public class MethodDemo1 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        System.out.print("[");
        printArray(arr);
        System.out.print("]");
    }
    static void printArray(int[] arr){
        for (int i : arr) {
            System.out.print(i + ",");
        }
    }
}

查看输出结果,却发现在55后面多一个逗号,所以要再进行修改,加上if判断语句,如果是数组的最后一个元素,则只输出元素,不和,进行拼接,并且将第二版代码中加上"[]"的代码放到方法中。 

输出结果如下:

c5c34fe180004215bcad1259c2f150cf.png

再次修改后的代码如下:

public class MethodDemo1 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        printArray(arr);
    }
    static void printArray(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1){
                System.out.print(arr[i]);
            }
            else{
                System.out.print(arr[i] + ",");
            }
        }
        System.out.print("]");
    }
}

在写代码时有一处错误:if(i == arr.length)有黄色提示,说Condition 'i == arr.length' is always 'false',即条件永远为假,因为i是数组的下标,最大值只能为arr.length-1,所以应该修改为if(i == arr.length - 1)。

需求2:设计一个方法求数组的最大值,并将最大值返回

public class MethodDemo2 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        System.out.println(getArrayMax(arr));
    }
    static int getArrayMax(int[] arr){
        int max = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
}

其实上述代码还可以进行修改,就是初始化max的值时,可以初始化为数组的第一个元素的值,然后循环从第二个元素开始,这样比较的次数会少一次,效率高一点点。

修改后的代码如下:

public class MethodDemo2 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        System.out.println(getArrayMax(arr));
    }
    static int getArrayMax(int[] arr){
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
}

这里再增加一个需求就是求数组中的最小值。

public class MethodDemo2 {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        System.out.println(getArrayMin(arr));
    }
    static int getArrayMin(int[] arr){
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] < min){
                min = arr[i];
            }
        }
        return min;
    }
}

 即在初始化min的值时,也是给定数组的第一个元素。

需求3:定义一个方法判断数组中的某个数是否存在,并将判断结果返回。

public class MethodDemo3 {
    public static void main(String[] args) {
        int [] a = {11,22,33,44,55};
        System.out.println(contains(a,23));
    }
    static boolean contains(int[] arr, int num){
        for (int i = 0; i < arr.length; i++) {
            if(num == arr[i])
                return true;
        }
        return false;
    }
}

有一点需要注意,当某个数在数组当中存在的时候,return true时会直接跳出方法返回true(因为return关键字意味着方法结束),说明此数在数组中存在。其他情况就说明此数在数组中不存在就直接返回false了。还有就是什么时候返回false,当与数组中的所有数都比较完成之后没有才能返回false,所以return false是写在循环外面的。

public class MethodDemo4 {
    public static void main(String[] args) {
        int [] a = {11,22,33,44,55};
        System.out.println(contains(a,22));
    }
    static boolean contains(int[] arr, int num){
        boolean flag = false;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == num)
                flag = true;
        }
        return flag;
    }
}

还有一种方式是定义一个flag,初始化为false,就是默认不存在,然后我们将此数与数组中的每一个数进行比较,如果相等说明此数存在就将flag修改为ture。

需求4:定义一个方法copyOfRange(int[] arr,int from,int to)

功能:将数组arr从索引from(包含from)开始到索引to(不包含to)的元素复制到新数组中,并将新数组返回。

public class MethodDemo5 {
    public static void main(String[] args) {
        int [] a = {11,22,33,44,55};
        int[] b = copyOfRange(a,1, 4);
        for (int i = 0; i < b.length; i++) {
            System.out.println(b[i]);
        }
    }
    static int[] copyOfRange(int[] arr, int from, int to){
        int[] a = new int[to - from];
        int j = 0;
        for (int i = from; i < to; i++) {
            a[j] = arr[i];
            j++;
        }
        return a;
    }
}

一些变量的名字起的不是很好,下面更改一下。

public class MethodDemo5 {
    public static void main(String[] args) {
        int [] a = {11,22,33,44,55};
        int[] copyArr = copyOfRange(a,1, 4);
        for (int i = 0; i < copyArr.length; i++) {
            System.out.println(copyArr[i]);
        }
    }
    static int[] copyOfRange(int[] arr, int from, int to){
        int[] newArr = new int[to - from];
        //新数组的索引
        int index = 0;
        for (int i = from; i < to; i++) {
            newArr[index] = arr[i];
            index++;
        }
        return newArr;
    }
}

还有一点要注意就是方法的返回类型也可以是数组,以前都没有注意过。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值