0
点赞
收藏
分享

微信扫一扫

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 条评论