从0开始学java--day6.5

今天把昨天的数组剩余部分讲完,因为数组已经快接近尾声,可能理论不是很多,这一次会更加着重写题目~

先来认识一下Java中一个专门针对数组进行操作的包装方法:Arrays

可以私下了解一下,这里举例一个数组以字符串形式输出的方法:

如果想要这个的话可以评论区走一波私发一起进步~

java 复制代码
public static void main1(String[] args) {
        //数组定义
        int[] arr={1,2,3,4,5,6};
        int[] arr2=new int[]{7,8,9,10};//数组对象
        //不初始化都是0值,出了布尔类型,布尔类型是false
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println("");

        //增强for循环,for each循环
        for (int x:arr2) {//右边是数组名,左边是当前这个数字
            //遍历数组,取出其中的数据给到变量
            System.out.print(x+" ");
        }
        System.out.println();

        //操作数组的工具类
        String ret = Arrays.toString(arr);
        //使用Arrays的toString方法把传入的参数arr表示的数组以字符串的形式进行输出
            System.out.print(ret+" ");
    }

然后是Java个数组名指向了同一个元素的时候,无论使用哪一个数组名进行操作都可以对指向的那个数组进行修改!~

java 复制代码
public static void main(String[] args) {
        int[] arr = {1,2,3,4};
        int[] arr2={4,5,6,7};
        arr=arr2;//只要两个指向了同一个数组,那么无论哪一个数组都可以修改
        arr[1]=7;
        arr2[0]=5;
        for(int i=0;i<arr2.length;i++){
            System.out.print(arr2[i]+" ");
        }
    }

可以看到原本指向的是arr2,里面是4,5,6,7,经过修改之后1地址值变成7,0地址值变成5,都是运行成功没有问题的~

再来看一个小题目:将数组中的每一个元素都扩大两倍

java 复制代码
public static void fun(int[] arr){
        for (int i=0;i< arr.length;i++){
            arr[i]=arr[i]*2;//直接*2即可!~
        }
    }

    public static void main4(String[] args){
        int[] arr={1,2,3,4,5};
        System.out.println(Arrays.toString(arr));
        fun(arr);
        System.out.println(Arrays.toString(arr));
    }

然后就是一个很好玩的代码~来看看吧

java 复制代码
public static String dun(int[] arr){
        String ret = "[";  // 初始化字符串,以左方括号开始

        // 遍历数组中的每个元素
        for (int i = 0; i < arr.length; i++) {
            ret += arr[i];  // 将当前数组元素添加到结果字符串中

            // 如果不是最后一个元素,添加逗号和空格分隔符
            if (i != arr.length - 1) {
                ret += ", ";
            }
        }

        ret += "]";  // 在字符串末尾添加右方括号
        return ret;   // 返回格式化后的字符串
    }

    public static void main(String[] args) {
        int[] arr = {2, 4, 6, 8, 10};
        System.out.println(dun(arr));   // 调用dun方法并打印结果
        // 输出: [2, 4, 6, 8, 10]
    }

这样可以模拟一个数组的样式~一维数组的差不多就是这个样子啦,来做点题目吧~

java 复制代码
import java.util.Arrays;

public class pp_25 {
    //是否存在连续三个奇数的数组  如果存在,请返回 true ;否则,返回 false 。
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,3,5};
        boolean flg = false;
        int count = 0;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 != 0) {
                count++;
                if (count == 3) {       // 如果连续奇数达到3个
                    flg = true;
                    break;              // 找到后提前结束循环
                }
            } else {
                count = 0;
            }
        }

        System.out.println(flg);  // 输出:false
    }



    //数组中出现次数 大于 n/2 的元素
    public  static int fun(int[]arr){
        Arrays.sort(arr);
        return arr.length/2;//返回数组长度除以2的整数结果
        //因为数组中某个数量最多,然后按照顺序来那肯定是某个数量占大多数
        //中间的一定是最多的,比如10个球4个红的6个黑的,中间值5一定是黑的
    }

    public static void main8(String[] args) {
        int[]arr={1,2,2,2,1};
        System.out.println(fun(arr));
    }

    //只出现一次的元素
    public static void main7(String[] args) {
        int[]num={2,2,1};
        int res=0;
        for (int num1:num){
            res ^= num1;
        }
        System.out.println(res);
    }

    //给定一个整数数组 num 和一个整数目标值 target,
    // 请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
    public static int[] twoSum(int[] num,int target){
        for (int i=0;i< num.length;i++){
            for (int j=i+1;j< num.length;j++){
                if(num[i]+num[j]==target){//前一位和后一位相加比较
                    return new int[]{i,j};
                }
            }
        }
        return new int[0];//没有找到
    }

    public static void main6(String[] args) {
        int[] num = {2,7,11,15};
        int target=9;
        int[] res=twoSum(num,target);
        System.out.println(Arrays.toString(res));
    }


    //给定一个整型数组, 实现冒泡排序(升序排序)
    public static void main5(String[] args) {
        int[] arr={44,2,1,11,23,45,6};
        boolean flg=false;
        for (int i=0;i< arr.length-1;i++){
            flg=false;
            for (int j=0;j< arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                    flg=true;//交换了
                }

            }
            if(flg==false){
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
    }

    //二分查找
    public static int bs(int[] arr,int key){
        int left=0;
        int right = arr.length-1;
        while (left<=right){
            int mid=(left+right-1);
            if(key<arr[mid]){
                right=mid-1;
            } else if (key>arr[mid]) {
                left=mid+1;
            }else {
                return mid;
            }
        }
        return -1;
    }

    public static void main4(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        System.out.println(bs(arr,5));
    }

    //调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。

    public static void main3(String[] args) {
        int[] arr={1,2,3,4,5,6};
        System.out.println("转换前:"+Arrays.toString(arr));
        int[] arr2=new int[arr.length];
        int index=0;
        for (int i=0;i< arr.length;i++){
                if(arr[i]%2!=0){
                    arr2[index]=arr[i];
                    index++;
                }
            }

        for (int i = 0; i < arr.length; i++) {
            if(arr[i]%2==0){
                arr2[index]=arr[i];
                index++;
            }
        }

        System.out.println("转换后"+Arrays.toString(arr2));
    }

//实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素
    // 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3},
    // 修改之后为 {2, 4, 6}

    public static void transform(int arr[]){
        for (int i=0;i< arr.length;i++){
            arr[i]=arr[i]*2;
        }
    }

    public static void main2(String[] args){
        int[] arr={1,2,3};
        System.out.println("原数组为:"+ Arrays.toString(arr));
        transform(arr);
        System.out.println("修改之后为:"+ Arrays.toString(arr));
    }
    }
}

习题举例完了,这些都是比较基础的操作,但是平时也不能不复习,否则若干天之后你连看都看不懂~一定要记住学习是一个积累的过程~

来看看二维数组:(和C差不多,直接上代码锻炼读代码能力)

java 复制代码
public static void main(String[] args) {
        //不规则二维数组
        int[][] arr=new int[2][];
        arr[0]=new int[4];//第一行四个
        arr[1]=new int[6];//第二行六个
        for (int i=0;i< arr.length;i++){
            for (int j =0;j<arr[i].length;j++){
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }
    }

    public static void main1(String[] args) {
        //二维数组
        //java中二维数组是一个特殊的一维数组,每一行都是一个新的地址
        int[][] arr = {{1, 2, 3}, {4, 5, 6}};
        int[][] arr2=new int[][]{{1,2,3},{4,4,5}};
        int[][] arr3=new int[2][3];
        //java中二维数组不可以省略行
        int[][]arr4=new int[2][];//不规则二维数组
        //遍历
        /*for (int i = 0; i < 2; i++) {
            for (int j=0;j<3;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }*/
        System.out.println();
        //java中二维数组是一个特殊的一维数组,每一行都是一个新的地址
        System.out.println(Arrays.toString(arr[0]));
        System.out.println(Arrays.toString(arr[1]));
        System.out.println();

        //也就是说arr数组其实是两个元素,每个元素都是一个数组
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println();

        for (int[] tmp : arr) {      // 遍历二维数组的每一行
            for (int x : tmp) {      // 遍历当前行的每个元素
                System.out.print(x + " ");  // 打印元素加空格
            }
            System.out.println();    // 换行到下一行
        }
    }

如果有什么遗漏的欢迎补充~

学尔不思则罔,思而不学则殆。希望大家在学习完基础知识之后不要忘记拿着这些知识去刷题,增强记忆力以及培养思考能力以及写出良好代码的习惯。希望除了在博客分享基础外还能再在力扣、洛谷再次见面~

相关推荐
沙子迷了蜗牛眼16 分钟前
当展示列表使用 URL.createObjectURL 的创建临时图片、视频无法加载问题
java·前端·javascript·vue.js
ganshenml18 分钟前
【Android】 开发四角版本全解析:AS、AGP、Gradle 与 JDK 的配套关系
android·java·开发语言
我命由我1234519 分钟前
Kotlin 运算符 - == 运算符与 === 运算符
android·java·开发语言·java-ee·kotlin·android studio·android-studio
小途软件25 分钟前
ssm327校园二手交易平台的设计与实现+vue
java·人工智能·pytorch·python·深度学习·语言模型
alonewolf_9929 分钟前
Java类加载机制深度解析:从双亲委派到热加载实战
java·开发语言
追梦者12330 分钟前
springboot整合minio
java·spring boot·后端
云游33 分钟前
Jaspersoft Studio community edition 7.0.3的应用
java·报表
帅气的你39 分钟前
Spring Boot 集成 AOP 实现日志记录与接口权限校验
java·spring boot
zhglhy1 小时前
Spring Data Slice使用指南
java·spring
win x1 小时前
Redis 主从复制
java·数据库·redis