数组

一、一维数组

1、数组的定义方式

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

int[] x = new int[100];

拆分:

int[] x;              // 声明一个int[]类型的变量
x = new int[100];    // 创建一个长度为100的数组

2、一维数组内存图解:

 

3、定义数组和访问数组中的元素:

 1public class ArrayDemo01 {
 2    public static void main(String[] args) {
 3        int[] arr; // 声明变量
 4        arr = new int[3]; // 创建数组对象
 5        System.out.println("arr[0]=" + arr[0]); // 访问数组中的第一个元素
 6        System.out.println("arr[1]=" + arr[1]); // 访问数组中的第二个元素
 7        System.out.println("arr[2]=" + arr[2]); // 访问数组中的第三个元素
 8        System.out.println("数组的长度是:" + arr.length); // 打印数组长度
 9    }
 10}

4、各种数据类型的数组默认初始化值:

 

5、元素赋值方式:

 1public class ArrayDemo02 {
 2    public static void main(String[] args) {
 3        int[] arr = new int[4]; // 定义可以存储4个整数的数组
 4        arr[0] = 1; // 为第1个元素赋值1
 5        arr[1] = 2; // 为第2个元素赋值2
 6        // 下面的代码是打印数组中每个元素的值
 7        System.out.println("arr[0]=" + arr[0]);
 8        System.out.println("arr[1]=" + arr[1]);
 9        System.out.println("arr[2]=" + arr[2]);
 10        System.out.println("arr[3]=" + arr[3]);
 11    }
 12}

6、数组的静态初始化方式:

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

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

实例:

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

7、总结:

public static void main(String[] args) 
    {
        //数组定义
        int[] x=new int[3];
        int[] a={2,4,6,8,3,5,9};
        //赋值
        x[0]=1;
        x[1]=2;
        x[2]=3;
        //取值
        System.out.println(x[2]);
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }

二、数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。

方式:

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]); // 通过索引访问元素
        }
    }
}

三、数组最值

方法:

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); // 打印最大值
    }

最小值同理

四、数组常见问题:

1、数组越界异常:

每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错

实例:

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

上图运行结果中所提示的错误信息是数组越界异常ArrayIndexOutOfBoundsException,

出现这个异常的原因是数组的长度为4,其索引范围为0~3,

而上述代码中的第4行代码使用索引4来访问元素时超出了数组的索引范围。

2、空指针异常

在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,

则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常

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

通过上图所示的运行结果可以看出,上述代码中第4、5行代码都能通过变量arr正常地操作数组。

第6行代码将变量置为null,当第7行代码再次访问数组时就出现了空指针异常NullPointerException。

五、二维数组

1、定义方式:

int[][] arr1=new int[3][4];//方式1
        int[][] arr2=new int[3][];//方式2
        arr2[0]={1,2,3,4,5};
        arr2[1]={4};
        arr2[2]={23,123,2345}
        int[][] arr3={{1,2,3}{2,3}{6}};//方式3

2、二维数组遍历

for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr2[i].length;j++){
                System.out.print(arr2[i][j]+"");
            }
            System.out.println();

3、二维数组内存图解:

练习1:

第一小组销售额为{11, 12}万元

第二小组销售额为{21, 22, 23}万元

第三小组销售额为{31, 32, 33, 34}万元。

求:

公司三个销售小组中每个小组的总销售额以及整个公司的销售额

int[][] arr={{11,12},{21,22,23},{31,32,33,34}};
        int a=0;
        int count=0;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                count=count+arr[i][j];
            }
            System.out.println("第"+(i+1)+"组销售总额:"+count);
            a+=count;
            count=0;
        }
        System.out.println("总销售额:"+a);

练习2:

随机点名

import java.util.Random;
class  demo2
{
    public static void main(String[] args) 
    {
        String[] str={"A","B","C",D","E","F","G","H","I","J","K"};
        Random r=new Random();
        int index=r.nextInt(str.length);
        System.out.println(str[index]);
    }
}

例题:

 

1.编写代码实现如下内容:if语句实现考试成绩分等级(使用switch语句)。
[90-100] A等。
[80-90) B等。
[70-80) C等。
[60-70) D等。
[0-60) E等。
请根据给定成绩,输出对应的等级。
说明:"["表示包含,")"表示不包含

//第一题
        Scanner sum=new Scanner(System.in);
        int sss=sum.nextInt();
        int sc=(int)sss / 10;
        switch(sc){
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            System.out.println("等级是E等");
            break;
        case 6:
            System.out.println("等级是D等");
            break;
        case 7:
            System.out.println("等级是C等");
            break;
        case 8:
            System.out.println("等级是B等");
            break;
        case 9:
        case 10:
            System.out.println("等级是A等");
            break;
        default:
            break;
        }

 

2.分析以下需求,并用代码实现:

(1)根据工龄(整数)给员工涨工资(整数),工龄和基本工资通过键盘录入

(2)涨工资的条件如下:

[10-15)     +5000

[5-10)      +2500

[3~5)       +1000

[1~3)       +500

[0~1)       +200

(3)如果用户输入的工龄为10,基本工资为3000,程序运行后打印格式"您目前工作了10年,基本工资为 3000元, 应涨工资 5000

元,涨后工资 8000元"

//第二题
        Scanner shuru=new Scanner(System.in);
        int age=shuru.nextInt();
        int money=shuru.nextInt();
        switch(age){
        case 0:
            System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资200元,涨后工资"+(money+200)+"元");
            break;
        case 1:
        case 2:
            System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资500元,涨后工资"+(money+500)+"元");
            break;
        case 3:
        case 4:
            System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资1000元,涨后工资"+(money+1000)+"元");
            break;
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
            System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资2500元,涨后工资"+(money+2500)+"元");
            break;
        case 10:
        case 11:
        case 12:
        case 13:
        case 14:
            System.out.println("您目前工作了"+age+"年,基本工资为"+money+"元,应涨工资5000元,涨后工资"+(money+5000)+"元");
            break;
        default:
            break;
        }

 

posted on 2018-07-18 18:07  落雨无晴  阅读(208)  评论(0编辑  收藏  举报