十进制转二进制的思路:
具体代码见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