数组

1. 数组的初始化

数组有两种初始化方式:动态初始化、静态初始化
两种初始化方式不能同时使用,即:不能在给定数组长度的同时给定初始化值

1.动态初始化

只指定长度,由jvm给定初始值
格式:数据类型[] 数组名 = new 数据类型[数组长度];

2.静态初始化

给定初始值,由jvm确定长度
格式:数据类型[] 数组名 = new 数据类型[]{元素1,,元素2,...};

不同数据类型的默认初始值:

数据类型初始值
byte0
short0
int0
long0L
float0.0f
double0.0
booleanfalse
char‘/u0000’(null)
引用类型null

3.一维数组逆序

思路:

  1. 将0索引与length-1索引数据交换;
  2. 将1索引与length-2索引数据交换;
  3. 一直交换到length/2索引即可
int[] arr = new int[]{1, 2, 3, 4, 5};
//方式一
for (int i = 0; i < arr.length / 2; i++) {
    int temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - i - 1] = temp;
}
//5 4 3 2 1 
for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
}

//方式二
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
    int temp = arr[start];
    arr[start] = arr[end];
    arr[end] = temp;
}
//1 2 3 4 5
for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
}

4. 整形数据转换为数组

思路:

  1. 键盘录入需要转换数据n的值
  2. 定义一个数组(数组长度根据需求确定)
  3. 依次获取数据n每一位的值存入数组
  4. 数组逆序
  5. 遍历打印数组

测试代码如下:

import java.util.Scanner;

public class Math {
    public static void main(String[] args) {
        //1.键盘录入需要转换数据n的值
        Scanner in = new Scanner(System.in);
        System.out.print("请输入一个整数(不超过8位):");
        int n = in.nextInt();

        //2.定义一个数组(数组长度根据需求确定)
        int[] arr = new int[8];

        //定义数组中装入整数的位数
        int index = 0;

        /*
        3.依次获取数据每一位的值存入数组
        循环条件使用n>0
        当n=0时,即表示该整数每一位的值都已存入数组
        */
        while (n > 0) {
            /*
            假定n=123456
            每一次循环后数组中装入的值:
                arr[0]=6,arr[1]=5,arr[2]=4,
                arr[3]=3,arr[4]=2,arr[5]=1
            */
            arr[index] = n % 10;
            //每一次循环后index的值:1,2,3,4,5,6
            index++;
            /*
            假定n=123456
            每一次循环后n的值:
            12345,1234,123,12,1,0
            */
            n /= 10;
        }

        //4.数组逆序
        for (int start = 0, end = index - 1; start < end; start++, end--) {
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }

        //5.遍历打印数组
        for (int i = 0; i < index; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}
/**
 * 测试结果如下:
 * 请输入一个整数(不超过8位):123456
 * 1 2 3 4 5 6 
 */

2. 二维数组

元素为一维数组的数组

1. 二维数组的定义格式

  1. 数据类型[][] 数组名 = new 数据类型[m][n];

     定义一个含有m个一维数组,每个一维数组含有n个元素的二维数组
    
  2. 数据类型[][] 数组名 = new 数据类型[m][];

     可以动态地给出每个一维数组的元素个数
     示例:
     	int[][] arr = new int[3][];
     	arr[0] = new int[1];
     	arr[1] = new int[2];
     	arr[3] = new int[3];
    
  3. 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,…},{元素1,元素2,…},{元素1,元素2,…},…};

2. 二维数组元素的获取

通过 数组名[m][n] 获取第m+1个一维数组的第n+1个元素
示例:
	int[][] arr = new int[][]{{1, 2, 3}, {11, 22}, {111, 222, 333, 444}};
	//arr[2][2]=333
	System.out.println("arr[2][2]=" + arr[2][2]);

3. 获取n行杨辉三角

杨辉三角示例:
						1
					1		1
				1	   	2		1
			1		3		3		1
		1		4		6		4		1
	1		5		10		10		5		1
...		...		...		...		...		...		...

思路:

  1. 键盘录入n的值
  2. 定义一个行数和列数都为n的二维数组;
  3. 将该二维数组每一行的第一列和最后一列赋值为1;
  4. 从第三行开始,除了首尾,其余每一个数据都是其上一行的前一列和本列之和;
  5. 遍历该二维数组

测试代码如下:

import java.util.Scanner;

public class Math {
    public static void main(String[] args) {
        //1.键盘录入n的值
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int n = in.nextInt();

        //2.定义一个行数和列数都为n的二维数组
        int[][] arr = new int[n][n];

        //外层循环获取每个一维数组,内层循环设置一维数组中相关元素的值
        for (int i = 0; i < arr.length; i++) {
            //第n行有n个数据,所以只需j<=i即可
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    //3.将该二维数组每一行的第一列和最后一列赋值为1
                    arr[i][j] = 1;
                } else {
                    //4.从第三行开始,除了首尾,其余每一个数据都是其上一行的前一列和本列之和
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
                }
            }
        }
        //5.遍历该二维数组
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}
/**
 * 测试结果如下:
 * 请输入一个整数:6
 * 1 
 * 1 1 
 * 1 2 1 
 * 1 3 3 1 
 * 1 4 6 4 1 
 * 1 5 10 10 5 1 
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值