Java学习DAY6~数组练习~2020.12.24

Java学习——数组练习

1.数组转字符串

1.1 直接打印

  • 1.代码
public class arrExercise {
    public static void main(String[] args) {
     int [] arr={1,2,3,4,5,6};
     //直接打印数组只是一个类似地址的东西,并不是数组的内容
        System.out.println(arr);
    }
}
  • 结果
    在这里插入图片描述

1.2 编写一个方法进行打印

  • 代码
public class arrExercise {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        //直接打印数组只是一个类似地址的东西
//        System.out.println(arr);
        //要想打印数组内容,我们需要将数组转化成字符串再进行打印
        String result = arrTostring(arr);
        System.out.println(result);
    }

    public static String arrTostring(int[] arr) {
        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            result += arr[i];
            if (i != arr.length - 1) {
                result += ", ";
            }

        }
        result += "]";
        return result;
    }
  • 结果
    在这里插入图片描述

1.3 Java标准库中提供了直接打印数组转成字符串Arrarys.toString(arr);

  • 代码
import java.util.Arrays;

public class arrExercise {
    public static void main(String[] args) {
        //Java标准库中提供了直接把数组转成String的方法
       int [] arr={1,2,3,4,5,6};
        String  resutlt =Arrays.toString(arr);
        System.out.println(resutlt);
    }


}
  • 结果
    在这里插入图片描述

2.数组拷贝

Java中,直接使用“=”赋值的方式,不能拷贝数组

2.1 “=”赋值并不能进行数组拷贝

  • 代码
public class arrExercise {
    public static void main(String[] args) {
       int [] arr={1,2,3,4,5,6};
       //这样的写法相当于给arr又起了一个别名叫arr2,
       int [] arr2=arr;
       arr[0]=10;
        System.out.println(arr2[0]);
    }
}
  • 结果

在这里插入图片描述
从结果可以看到我们把arr的0号元素修改为10,打印输出arr2的0号元素也是10。其实arr和arr2都指向同一个地址就是{1,2,3,4,5,6}的地址。

2.2 编写一个方法进行数组拷贝

  • 代码
public class arrExercise {
    public static void main(String[] args) {
       int [] arr={1,2,3,4,5,6};
        int [] arr2=copyArray(arr);
        arr[0]=10;
        System.out.println(arr[0]);
        System.out.println(arr2[0]);
    }

    public static int[] copyArray(int[] arr) {
        //首要操作是一定要创建一个新的数组
        int[] result=new int[arr.length];
        for (int i=0;i<arr.length;i++) {
            result[i]=arr[i];
        }
        return result;
    }
}
  • 结果

在这里插入图片描述

2.3 Java标准库中提供了数组拷贝Arrary.copyof(数组名,数组长度)

  • 代码
import java.util.Arrays;

public class arrExercise {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        int[] arr2 = Arrays.copyOf(arr, arr.length);
        arr[0] = 7;
        System.out.println(arr[0]);
        System.out.println(arr2[0]);
    }

}
  • 结果
    在这里插入图片描述

3.找出数组元素中的最大元素

3.1 创建一个方法找数组中最大元素

  • 代码
//求数组中最大值
public class arrExercise {
    public static void main(String[] args) {
       //打擂台思想:从数组中上去擂台一个元素,然后其他元素依次上擂台进行比较,
        // 每次比较只留下最大的
        int[] arr = {9,5,2,7,3,6,10};
        int result =max(arr);
        System.out.println(result);
    }
    public  static  int max(int[] arr) {
        int result=arr[0];
        for (int i=0;i<arr.length;i++) {
            if (arr[i]>result) {
                result=arr[i];
            }
        }
        return  result;
}
}
  • 结果
    在这里插入图片描述

4.求数组中平均值

  • 代码
public class arrExercise {
    public static void main(String[] args) {

        int[] arr = {9,5,2,7,3,6,10};
        double result=avg(arr);
        System.out.println(result);
    }
    public  static double avg(int[] arr) {
        int sum=0;
        for (int x:arr) {
            sum+=x;
        }
     return (double )sum/(double)arr.length;
        //不强制转换成double类型,这里就是int类型进行相除,会截断小数部分
    }
}
  • 结果

在这里插入图片描述

5.查找数组元素

查找有两种类型1.给定位置,查找值;2.给定值,查找位置(数组下标)

5.1给定值,查找位置(数组下标)

  • 代码
public class arrExercise {
    public static void main(String[] args) {
        int[] arr = {9,5,2,7,3,6,10};
        int pos=search(arr,3);
        System.out.println(pos);
    }

    public static int search(int[] arr, int toSearch) {
        for (int i=0;i<arr.length;i++) {
            if (arr[i]==toSearch) {
                return i;
            }
        }
        return -1;
    }
}
  • 结果
    在这里插入图片描述

5.2 给定值,查找位置 二分查找

普通查找的效率比较低,尤其在数组元素个数非常多的时候,但是二分查找只适用于有序的数组。

  • 代码
public class test1220 {
    public static void main(String[] args) {
        //二分查找只适用于有序数组来使用
        int[] arr={1,3,4,6,7,9,10,15,17};
        int pos=binarySearch(arr,17);
        System.out.println(pos);
    }
    //直接取整个数组的中间元素,和带查找元素进行对比
    public static int binarySearch(int[] arr,int toSearch){
      //创建一个带查找的区间[left,right]
        int left=0;
        int right=arr.length-1;
        while (left<=right) {
            int mid=(left+right)/2;
            if(toSearch<arr[mid]){
                //去左侧区间查找,淘汰到右侧区间
                right=mid-1;
            }else if(toSearch>arr[mid]){
                //去右侧区间查找,淘汰掉左侧区间
                left=mid+1;
            }else {
                //相等
                return mid;
            }
        }
    return  0;
    }
}
  • 结果
    在这里插入图片描述

6 数组排序:冒泡排序

  • 代码
import java.util.Arrays;
//冒泡排序:(升序来算)依次比较相邻的两个元素,一趟比较下来,
// 就能把最大的元素放到最后或者最小的元素放到最前。
public class test1220{
    public static void main(String[] args) {
        int[] arr={1,4,2,5,7,9,3,6};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void bubbleSort(int[] arr) {
    //如果从前往后遍历进行比较交换,就是把最大元素放最后
    //如果从后往前遍历进行比较交换,就把最小元素放最前
        for (int bound=0;bound< arr.length;bound++) {
            for (int cur= arr.length-1;cur>bound;cur--) {
                 if (arr[cur-1]<arr[cur]) {
                    int temp=arr[cur-1];
                    arr[cur-1]=arr[cur];
                    arr[cur]=temp;
                }
            }
        }
    }
}
  • 结果

在这里插入图片描述

7 数组逆序

  • 代码
import java.util.Arrays;
public class test1220{
    public static void main(String[] args) {
        int[] arr={1,3,6,7,12,34};
        reverse(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void reverse(int[] a){
        int left=0;
        int right=a.length-1;
        while (left<right){
            //依次交换right和left的元素
            int tmp=a[left];
            a[left]=a[right];
            a[right]=tmp;
            left++;
            right--;
        }
    }
}
  • 结果

在这里插入图片描述

数组数字重排

  • 代码
//数组重排,排列之后保证所有的偶数在后,奇数在前
import java.util.Arrays;
import java.util.Scanner;
public class test1220{
    public static void main(String[] args) {
        int[] arr={1,3,4,5,6,7,8,9};
        transform(arr);
        System.out.println(Arrays.toString(arr));
    }
//从前往后找,找到一个奇数,再从后往前找,找到一个偶数,
// 交换这两个元素,直到这两个元素重合
    public static void transform(int[] arr) {
        int left=0;
        int right=arr.length-1;
        while (left > right) {
            //从左往右找偶数
            while (left < right && arr[left] % 2 != 0) {
                left++;
            }
            //从右往左找到一个奇数
            while (left < right && arr[right] % 2 ==0) {
                right--;
            }
            //当这两循环结束之后,交换 left 和 right 的元素
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
        }
    }
}
  • 结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值