java小白日记第六天

数组

在之前呢,我们学习了变量,假如我们要定义十个或者一百个甚至更多呢,那样定义起来就相对麻烦了,所以今天我学习了数组哈哈哈,下面带你们进入数组的world。

一、数组的定义

在Java里,定义一个数组我们要用下面的基本格式

数据类型[] 数组名 = new 数据类型[元素个数或数组长度]; int[] x = new int[100];

假如我们定义了一个a数组,那么第一个变量的名称就是a[0],在编程的世界里很多都是从0开始的,所以大家要慢慢接受。以此类推,往下a[1]等等。

我们可以尝试定义一个数组来看看

int[] a = new int[100];

上面这样我们就定义了一个a数组,他的容量是100哦,当然我们是取不到a[100]的哦,毕竟是从0开始的。

之后呢,假如我们想知道数组的容量,我们可以调用length属性,格式为数组名.length

元素默认值

数据类型 默认初始化值
byte、short、int、long 0
float、double 0.0
char 空字符,相当于一个空格
boolean false
引用数据类型 null

假如我们不想用默认给的值,我们可以给它赋值

arr[0] = 1;

除了上面定义数组的方式,我们还有静态的初始化的两种方式

1、类型[] 数组名 = new 类型[]{元素,元素,……};
2、类型[] 数组名 = {元素,元素,元素,……};

建议使用第二种,第一种相对比较麻烦,下面来演示一下

public class ArrayDemo03 {
  public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4 }; // 静态初始化
    // 下面的代码是依次访问数组中的元素
    System.out.println("arr[0] = " + arr[0]);
    System.out.println("arr[1] = " + arr[1]);
    System.out.println("arr[2] = " + arr[2]);
    System.out.println("arr[3] = " + arr[3]);
 }
}

二、数组遍历

数组的遍历就是依次的去访问素组里的每一个元素,下面我们使用for循环来遍历数组

public class ArrayDemo04 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
		// 使用for循环遍历数组的元素
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]); // 通过索引访问元素
		}
	}
}

通过for循环,一个一个打印出对应角标的元素

三、数组里常见的问题

1.最值问题(最大值最小值)

最大值

public class ArrayDemo05 {
	public static void main(String[] args) {
		int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定义一个数组
		int max = arr[0]; // 定义变量max用于记住最大数,首先假设第一个元素为最大值
		// 下面通过一个for循环遍历数组中的元素
		for (int x = 1; x < arr.length; x++) {
			if (arr[x] > max) { // 比较 arr[x]的值是否大于max
			max = arr[x]; // 条件成立,将arr[x]的值赋给max
			}
		}
		System.out.println("max=" + max); // 打印最大值
	}
}

最小值同理就是把max变成min,判断语句里的大于号变成小于号即可。

2.异常问题

2.1数组越界问题

public class ArrayDemo06 {
  public static void main(String[] args) {
    int[] arr = new int[4]; // 定义一个长度为4的数组
    System.out.println("arr[0]=" + arr[4]); // 通过角标4访问数组元素
 }
}

运行会出现数组越界异常,分析一下数组的长度为4,但是我们最多只能访问到a[3],a[4],不在这之中,所以嘞这样就算越界啦。

补充:今天在写数组的删除操作的时候就报了越界异常,下面上代码

    public static int[] deleteArr(int[] arr,int index){
        //1.创建一个数组和原来一样
        int[] temp = new int[arr.length-1];

        // 2. 把 index 之前的部分原封不动的搬过去
        for (int i = 0; i < index; i++) {
            temp[i] = arr[i];
        }
        // 3. 旧的数组从index开始循环把后续的数据搬过去
        for (int i = index; i < arr.length-1; i++) {
            temp[i] = arr[i+1];
        }
        return temp;

    }

新的数组要比原数组长度少1,一开始我写的时候把最后一个for循环里的length长度没有减一,这样到最后arr[i+1]操作的时候就越界了。

2.2空指针异常

在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null这样,我们就会报空指针异常了

public class ArrayDemo07 {
  public static void main(String[] args) {
    int[] arr = new int[3]; // 定义一个长度为3的数组
    arr[0] = 5; // 为数组的第一个元素赋值
    System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
    arr = null; // 将变量arr置为null
    System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 }
}

看一下代码之前代码赋值了,打印之后可以正常输出,而之后给它一个null,再打印就会报异常了,这样我们要注意下

四、二维数组

个人理解,就像一个表格,但是咱们又不要求每行每列的数字一样多

1.定义格式

第一种方式:
nt[][] arr = new int[3][4];

第二种方式:
int[][] arr = new int[3][];

第三种方式:
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

2.二维数组的访问

一般访问格式为这种

System.out.println( arr[0][0] );

3.二维数组的遍历和累加

	class ArrayDemo09 {
	public static void main(String[] args){
	//一维数组的求累加和并遍历
		int[] arr = {10,20,30,40,50};
		int sum = 0;
		for (int i=0; i<arr.length; i++) {
      	//System.out.println(arr[i]);
			sum += arr[i];
   		}
		System.out.println("sum= " + sum);
		System.out.println("---------------------");
		//二维数组的求累加和并遍历
		int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
		int sum2 = 0;
		for (int i=0; i<arr2.length; i++) {
			for (int j=0; j<arr2[i].length; j++) {
        	//System.out.println(arr2[i][j])
				sum2 += arr2[i][j];
			}
		}
		System.out.println("sum2= "+ sum2);
	}
}

访问和累加都差不多,用两个for循环解决即可

你可能感兴趣的:(java基础)