从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();    // 换行到下一行
        }
    }

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

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

相关推荐
Slow菜鸟5 小时前
SpringBoot集成Elasticsearch | Elasticsearch 8.x专属Java Client
java·spring boot·elasticsearch
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 82: 环形子数组的最大和
java·数据结构·算法·leetcode·决策树·线性回归·深度优先
豐儀麟阁贵5 小时前
4.5数组排序算法
java·开发语言·数据结构·算法·排序算法
Halo_tjn6 小时前
Java Map集合
java·开发语言·计算机
程序猿小蒜7 小时前
基于springboot的车辆管理系统设计与实现
java·数据库·spring boot·后端·spring·oracle
zl9798997 小时前
SpringBoot-Web开发之Web原生组件注入
java·spring boot·spring
小羊学伽瓦7 小时前
【Java数据结构】——常见力扣题综合
java·数据结构·leetcode·1024程序员节
I'm Jie8 小时前
(五)Gradle 依赖传递与冲突处理
java·spring boot·spring·kotlin·gradle·maven
我命由我123458 小时前
Spring Cloud - Spring Cloud 声明式接口调用(Fiegn 声明式接口调用概述、Fiegn 使用)
java·后端·spring·spring cloud·微服务·架构·java-ee