Java数组练习

Java数组练习

下面是关于数组的一些练习,程序中有题目要求以及对于解题的一部分注解

1.打印数组

public class Text4 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,};
        printArray(arr);
    }
 
    public static void printArray(int[] array) {
        for (int a:array) {//使用for-each循环输出数组
            System.out.print(a + " ");
        }
    }
}

在这里插入图片描述

2.求数组的平均值

public class Text1 {//实现一个方法 avg, 以数组为参数, 求数组中所有元素的平均值(注意方法的返回值类型).
    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4,5,6,7,8};
        System.out.println(avg(array));
    }
    public static double avg(int[] arr){
    //将数组中每个值求和,最后除以数组长度即可
        double sum = 0;
        for (int i = 0; i <arr.length ; i++) {
            sum += arr[i];
        }
        return sum/arr.length;
    }
}

在这里插入图片描述

3.奇数位于偶数之前

public class Text1 {//调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你这组数据的长度:");
        int a = sc.nextInt();
        System.out.println("请分别输入你的这组数据:");
        int[] arr = new int[a];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
        }
        System.out.println("你输入的这组数据是" + Arrays.toString(arr));
        sort(arr);
        System.out.println("--------------------------");
        System.out.println("排序后的数据为" +Arrays.toString(arr));
    }
    public static void sort(int[] arr){
        int left =0;
        int right = arr.length-1;
        while (left <= right){//外层循环,如果left大于right说明数组已经遍历了
            while (arr[left]%2 != 0){//从左开始,若是奇数往后移一位
                left++;
            }
            while (arr[right]%2 == 0){//从右开始,若是偶数往前移一位
                right--;
            }
            if (left>right) {//如果left已经大于right说明已经排好序,就直接跳出循环即可
                break;
            }
            //若左右都已移完,走到这一步说明左边是偶数右边是奇数,把数据进行交换即可
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
            }
        }
    }
}

在这里插入图片描述

4.冒泡排序

import java.util.Arrays;
public class Text8 { //给定一个整型数组, 实现冒泡排序(升序排序)
    public static void main(String[] args) {
        int[] array = {2, 4, 1, 8, 5, 3, 6};
        System.out.println("排序前" + Arrays.toString(array));
        bubble(array);
        System.out.println("---------------------------");
        System.out.println("冒泡排序后" + Arrays.toString(array));
    }
 
    public static void bubble(int arr[]) {
    //每次都把最大的数排到最后一位
        for (int i = 0; i < arr.length - 1; i++) {//外层控制排序次数
            int k = 1;//定义一个观察数字是否进行交换的变量
            for (int j = 0; j < arr.length - i; j++) {
            //内存控制每次排序需要比较那些数,每次比较次数都比上一次少1
                if (arr[i] > arr[i + 1]) {
                    int tmp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = tmp;
                    k = -1;//若交换了,将变量值修改为-1
                }
            }
            //若某次内存循环结束k的值没变,说明以及排序完成,一次交换都没发生
            if (k == 1) {
                break;
            }
        }
    }
}

在这里插入图片描述

5.数组是否有序

import java.util.Arrays;
public class Text8 {//给定一个整型数组, 判定数组是否有序(递增)
    public static void main(String[] args) {
        int[] array1 = {1,2,3,4,6,5};
        int[] array2 = {1,2,3,4,5,6};
        System.out.println("array1数组 " + jud(array1));
        System.out.println("array2数组 " + jud(array2));
    }
    public static String jud(int[] arr){
        for (int i = 0; i < arr.length-1; i++) {
            if (arr[i] > arr[i+1]){//循环判断数组每一个数是否小于他的下一位
                return "无序";
            }
        }
        return "有序";
    }
}

在这里插入图片描述

6.二分查找

public class Text9 { //给定一个有序整型数组, 实现二分查找
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int n = 3;
        int ret =find(arr,n);
        if(ret == -1){//若返回值为-1说明没找到
            System.out.println("该数组中没有" + n);
        }else{
            System.out.println("该数组中的"+n+"在第"+ret+"位");
        }
    }
    public static int find(int[] arr,int n){
        int i = 0;//定义i从数组最前边开始
        int j = arr.length-1;//j从数组最后边开始
        while (i < j){//
            int m = (i+j)/2;//m为每次查找的中间点
            if(arr[m] > n){//若m位置的数大于要找数字,说明该数字在m位置和j位置之间
                i = m+1;//i和m之间的数已经没意义,让i走到m+1的位置,再进行查找
            }else if(arr[m] < n){//在i和m之间
                j = m-1;//j前往m-1的位置
            }else {//m位置的数为n,说明找到了,返回位置m
                return m;
            }
        }
        return -1;//没找到返回-1
    }
}

在这里插入图片描述

7.数组的拷贝

import java.util.Arrays;
public class Text10 {//实现一个方法 copyOf, 对一个整型数组进行拷贝, 得到一个新的数组.
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        System.out.println("原数组是"+ Arrays.toString(arr));
        System.out.println("------------------------");
        System.out.println("拷贝的数组是" +Arrays.toString(copyOf(arr)));
    }
    public static int[] copyOf(int[] arr){//创建一个新数组将原数组数据全部拷贝一遍
        int[] a = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            a[i] = arr[i];
        }
        return a;
    }
}

在这里插入图片描述

8.数组转字符串

public class Text11 {//实现一个方法 toString, 把一个整型数组转换成字符串. 例如数组 {1, 2, 3} , 返回的字符串为 "[1, 2, 3]", 注意 逗号 的位置和数量.
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        System.out.println(toString(array));
        int[] arr = null;
    }
    public static String toString(int[] arr) {
        if (arr == null) {//数组为null直接返回null
            return null;
        }
        String ret = "[";//使用ret遍历储存数组的每一位
        for (int i = 0; i < arr.length; i++) {//使用for循环遍历数组
            if (i == arr.length - 1) {//若是最后一位需加一个“]”,不用加“,”
                ret += arr[i] + "]";
            }else {//每一位后加上“,”
                ret += arr[i] + ",";
            }
        }
        return ret;//返回该字符串
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值