【Java进阶篇】第二章 Java数组(下篇) 二维数组

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 【Java进阶篇】第二章 Java数组(下篇) 二维数组,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、二维数组

二维数组是一个特殊的一维数组,特殊在这个一维数组当中的每一个元素都是一维数组

图

System.out.println(a.length); //二维数组的长度

//第一个一维数组元素的长度
System.out.println(a[0].length);

2、二维数组元素的读和改

1)读

//二维数组的每个元素都是一个一维数组
int[] a1 = a[0];

//拿一维数组元素中的值
int b = a[0][0]

2)改

int[][] a = {
                {100,200,300},
                {30,20,40,50,60},
                {6,7,9,1,},
                {0}
        };
a[2][0] = 9527;
a[10][10] = 49; //error

数组中的下标越界异常–ArrayIndexOutOfBoundException
在这里插入图片描述

3、二维数组的遍历

二维数组——for遍历—->一维数组——for遍历—->一维数组中的元素

public class Array1 {
    public static void main(String[] args) {
        int[][] a = {
                {100,200,300},
                {30,20,40,50,60},
                {6,7,9,1,},
                {0}
        };
    for(int i=0;i<a.length;i++){
        for(int k=0;k<a[i].length;k++){
            System.out.println(a[i][k]);
        }
        //每一个一维数组循环结束就空一行
        System.out.println();
    }
    }

}
//遍历一个动态创建的数组
public class Array1 {
    public static void main(String[] args) {
    	//三个一维数组,每个一维数组中有四个元素
        int[][] array = new int[3][4];
        
    for(int i=0;i<array.length;i++){
        for(int k=0;k<array[i].length;k++){
            System.out.print(array[i][k]);
        }
        System.out.println();
    }
    }

}

运行结果:
在这里插入图片描述

例:

//使用一维数组,模拟栈数据结构
//要求这个栈可以存储Java中的任何引用数据类型
//栈中提供push方法模拟压栈,提供pop方法模拟弹栈

------------------
public class MyStack {
    private Object[] elements;
    private int index;

    /**
     * 在构造方法中赋初值
     * 初始化一维数组的长度为10
     * 使用index模拟栈帧
     */
    public MyStack(){
        this.elements = new Object[10];
        this.index = -1;
    }

    /**
     * 压栈
     * @param obj
     */
    public void push(Object obj){
        if(this.index >= this.elements.length-1){
            System.out.println("压栈失败,栈满");
        }
        this.index++;
        this.elements[index] = obj;
        System.out.println("压栈"+obj+"成功,栈帧指向"+ index);
    }

    /**
     * 弹栈方法
     */
    public void pop(){
        if(index < 0){
            System.out.println("弹栈失败,栈已空");
            return;
        }
        //能到这儿说明栈不空
        System.out.println("弹栈成功,弹出元素:"+ elements[index]);
        index--;
    }
}
class Test{
    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push("A String");
        myStack.push(666);
        myStack.push(false);
        myStack.pop();
        myStack.pop();
        myStack.pop();
        myStack.pop();
    }
}

思路:
用index属性模拟栈帧指向,和数组的下标做对比。
在这里插入图片描述

运行结果:
在这里插入图片描述

4、数组工具类原理(java.util.Arrays)

在这里插入图片描述

冒泡排序算法BubbleSort

原理图示:

在这里插入图片描述

在这里插入图片描述
代码实现:

public static void bubbleSort(int[] intArray){
        for(int i=intArray.length-1; i>0; i--){
            for(int k = 0;k < i;k++){
                int temp;
                if(intArray[k] > intArray[k+1]){
                    temp = intArray[k];
                    intArray[k] = intArray[k+1];
                    intArray[k+1] = temp;
                }
            }
        }
        //遍历输出最终结果
        for(int i=0;i<=intArray.length-1;i++){
            System.out.println(intArray[i]);
        }
    }

二分法查找 :

在这里插入图片描述
在这里插入图片描述
代码实现:

public static void halfSearch(int[] array,int searchValue){
        //开始下标
        int begin = 0;
        //结束下标
        int end = array.length-1;
        while(begin<=end){
            int mid = (begin+end)/2;
            if(array[mid] == searchValue){
                System.out.println("找到了"+array[mid]+"下标为"+mid);
                return;
            }else if(array[mid] < searchValue){
                //在中间元素右侧
                begin = mid+1;
            }else{
                //在中间元素左侧
                end = mid-1;
            }
        }
        //begin>end了还没找到,即不存在
        System.out.println("元素不存在");
    }

5、Array工具类的使用

import java.util.Arrays;
public class Array3 {
    public static void main(String[] args) {
        int[] array = {3,6,5,12,1,2,32,5,5};
        Arrays.sort(array);
        int index = Arrays.binarySearch(array,32);
        System.out.println(index == -1 ? "元素不存在!" : "已找到,元素下标是:"+index);
    }
}


注意:

Arrays.sort(arry);方法即已将array数组排序好并再次赋给arry了,不用拿新的数组变量再去接收。array这时可直接遍历,也可直接传给binarySearch方法了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146103.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!