D04 08~12 数组

十进制转二进制的思路:
这里写图片描述
具体代码见D0411.java
十进制转十六进制的思路:
这里写图片描述
先用一个变量temp存放取出来的最低四位,它可能是一个数字/字母。
具体代码见D0410.java

D0412 进制转换优化
我们发现,无论是十进制转二进制还是十进制转16进制,有些操作是一样的,都要定义数组、指针、都要做while语句etc.不同之处在于&的数不一样、右移的位数不一样。
那么我们可以把共同操作抽取出来。
具体代码见D0412.java

D0413 数组(二维数组)
2.8.5 数组中的数组
二维数组 [] []


  • 格式1:

int[][] arr=new int[3][2];
表示:
定义了名称为arr的二维数组
二维数组中有3个一维数组,每个一维数组中有2个元素
一维数组的名称分别为arr[0],arr[1],arr[2]
给第一个一维数组1脚标位赋值为78写法是:
arr[0][1]=78;

E.g.
这里写图片描述
如果写arr[0][3]=90; //脚标越界

一个例子:
class Array2Demo
{
public static void main(String[] args)
{

    int[] arr = new int[3]; //一维数组
    int[][] arr1= new int[3][4];  //定义了名称为arr的二维数组,二维数组中有3个一维数组。每一个一维数组中有4个元素
    System.out.println(arr1);

}

}
运行结果:
这里写图片描述
而如果:
这里写图片描述
那么就会出现:
这里写图片描述
如果:
这里写图片描述

输出0


  • 格式2:
    int[][] =new int[3][];
    表示:
    二维数组中有3个一维数组
    每个一维数组都是默认初始值null
    可以对这个三个一维数组分别进行初始化
    arr[0]=new int [3];
    arr[1]=new int [1];
    arr[2]=new int [2];
    E.g.
    这里写图片描述
    为什么这种定义方式下,arr[0]打印输出,得到的就不是一个存放地址而是null了呢?
    说明:
    二维数组中存了3个一维数组,这三个一维数组没有初始化过,所以用的是默认初始化。而数组是引用数据类型,初始化都是null

如果我这么写:
int[][] arr2= new int[3][]; //格式2
//System.out.println(arr2);
arr2[0]= new int[3];
arr2[1]= new int[1];
arr2[2]= new int[2];
单独对每个一维数组手动初始化,其实就是在堆里面开辟一个小的一维数组,然后把这个一维数组的地址(例如0x0089)赋给arr[0]
这里写图片描述
注:
arr2.length=3;
arr2[0].length=3;
下面的代码对一个二维数组求总和:

 int[][] arr={{3,5,1,7},{2,3,5,8},{6,1,8,2}};

    int sum=0;
    for(int x=0;x<arr.length;x++)
    {
        for(int y=0;y<arr[x].length;y++)
        {

            sum=sum+arr[x][y];

        }

    }

    System.out.println("sum="+sum);

D0414 数组(二维数组练习)
定义一维数组的时候,int[] x 或者int x[] 这两种方式都可以。
定义二维数组的时候,int[] [] y或者int y[][] 或者int[] y[] 也行。
int x.y[] //此时x是一维数组,y是二维的
a. x[0]=y; False
b. y[0]=x; True
c. y[0][0]=x; False
d. x[0][0]=y; False
e. y[0][0]=x[0]; True
f. x=y; False

猜你喜欢

转载自blog.csdn.net/ak47fourier/article/details/80612452