Java(2):数组(1)

日期:2017/10/10

一、Java数组的相关知识

1.1  一维数组


(1)数组:存储同一种数据类型的多个元素的集合,每个元素都有编号,从0开始,最大编号是数组的长度-1
(2)数组的格式:
        A:数据类型[] 数组名;
        B:数据类型 数组名[];
(3)数组的初始化:
        A:动态初始化 只给长度,不给元素
                int[] arr = new int[3];
        B:静态初始化 不给长度,给元素
                int[] arr = new int[]{1,2,3};
                简化版:int[] arr = {1,2,3};
(4)java中的内存分配
        A:栈 存储局部变量
        B:堆 new出来的
        C:方法区
        D:本地方法区
        E:寄存器
(5)两个常见小问题
        A:数组越界
        B:空指针异常
(6)数组常见操作 获取数组长度:数组名.length
        A:数组遍历
        B:获取最值
        C:数组反转
        D:查表法
        E:查找指定元素第一次出现的索引

练习代码:


package com.java.myself;

import java.util.Scanner;

public class ArrayTest {
	public static void main(String[] args){
		int[] arr = {1,2,3,4,6,5,7,8};
		String[] strarray = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
		
		//查表法
		Scanner sc = new Scanner(System.in);
		System.out.println("Please input num(1-7): ");
		int index = sc.nextInt();
		System.out.println("Your searching date is: "+ strarray[index]);
		
//		printArray(arr);
//		getMax(arr);
//		reverse(arr);
		int index1 = indexOfArray(arr,8);
		System.out.println(index1);
	}
	public static void printArray(int[] arr) {
		System.out.print("[");
		for (int i=0; i<arr.length; i++) {
			if (i <= arr.length-1) {
				System.out.print(arr[i] +", ");
			}
			System.out.print(arr[i]);
		}
		System.out.println("]");
	}

	//最值
	public static int getMax(int[] arr) {
		int max = arr[0];
		for (int i=0; i<arr.length; i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
		}
		return max;
	}
	public static void reverse(int[] arr){
		for (int start=0,end=arr.length-1; start<=end; start++,end--){
			int temp = arr[start];
			arr[start] = arr[end];
			arr[end] = temp;
		}
		int i = 0;
		while(i<arr.length){
			System.out.println(arr[i]);
			i++;
		}
	}
	public static int indexOfArray (int[] arr,int key){
		int index = -1;
		for (int i=0; i<arr.length; i++){
				if (arr[i] == key){
					index = i;
				}
		}
		return index;
	}
	
}





1.2 二维数组


(1)二维数组:元素是一维数组的数组。
(2)格式:
A:数据类型[][] 变量名 = new 数据类型[m][n];
B:数据类型[][] 变量名 = new 数据类型[m][];
C:数据类型[][] 变量名 = new 数据类型[][]{{元素...},{元素...},{元素...}};
  数据类型[][] 变量名 = {{元素...},{元素...},{元素...}};
(3)常见操作:
A:数组遍历
B:求和案例

练习代码:

package com.test;

public class TwoDemension {
	public static void main(String[] args){
		int[][] arr = new int[3][2];
		System.out.println(arr);//[[I@7d3598c3
		System.out.println(arr[0]); //[I@57125f92
		System.out.println(arr[2]);
		System.out.println(arr[1]);
		System.out.println("***********");
		
		int [][] arr1 = new int[3][];			
		System.out.println(arr1);//[[I@7d3598c3
		System.out.println(arr1[0]);//null
		System.out.println(arr1[2]);//null
		System.out.println(arr1[1]);//null
/*
 * 从输出log可以看到,当二维数组没有声明二维元素数量时,内存并未分配相应的
 * 空间,当二维元素确定数量后,首地址便会被分配,即Java的堆内存。
 * */
		
		arr[0] = new int[3];
		arr[1] = new int[1];
		arr[2] = new int[2];
		
		System.out.println(arr[0]);
		System.out.println(arr[2]);
		System.out.println(arr[1]);

		arr[2][1] = 100;
		arr[0][2] = 200;
		
		System.out.println(arr[0][2]);
		System.out.println(arr[2][1]);
		System.out.println("***********");
				
		Demo demo = new Demo();
		demo.test(null);
	}

}

class Demo{
	public static void test(String[] args){
		/*
		 * 当初始化时直接分配变量时,内地址也会分配,跟第一个情况一样。
		 * */
		int [][] arr = {{4,5,6},{5,5,5,6},{5,4}};
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

输出情况:

[[I@15db9742
[I@6d06d69c
[I@7852e922
[I@4e25154f
***********
[[I@70dea4e
null
null
null
[I@5c647e05
[I@33909752
[I@55f96302
200
100
***********
[[I@3d4eac69
[I@42a57993
[I@75b84c92
[I@6bc7c054

END.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值