Java基础___数组

数组

    概念:同一种类型数据的集合。其实数组就是一个容器。
        数组的好处可以自动给数组中的元素从0开始编号,方便操作这些元素。
           格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
           示例:int[] arr = new int[5];
           格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
           示例:int[] arr = new int[]{3,5,1,7};
                 int[] arr = {3,5,1,7};

注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。

 

数组遍历

int[] arr = { 1, 2, 3 };
    for (int y = 0; y < arr.length; y++) {
      System.out.println(arr[y]);
      // System.out.println("arr["+y+"]="+arr[y]); 打印效果 x[0]=1;
    } // 那么这就是数组的第一个常见操作.遍历
    数组中有一个属性可以获取到数组中元素的个数,也就是数组的长度. 数组名.length
int[] arr = { 1, 2, 3 };
    for (int y = 0; y < arr.length; y++) {
      System.out.println(arr[y]);
      // System.out.println("arr["+y+"]="+arr[y]); 打印效果 x[0]=1;
    } // 那么这就是数组的第一个常见操作.遍历

数组常用技巧
String[] arr=new String[]{"Java","C#","C++","C","Ruby"};
//数组转List集合
List<String> arrList=new ArrayList<String>(Arrays.asList(arr));

String[] arr = new String[] { "Java", "C#", "C++", "C", "Ruby" };
// 数组转set集合
Set<String> arrList = new HashSet<String>(Arrays.asList(arr));

String[] arr = new String[] { "Java", "C#", "C++", "C", "Ruby" };
// 判断数组中是否包含某值
boolean b = Arrays.asList(arr).contains("C#");



数组的常见异常

数组中最常见的问题:

1. NullPointerException 空指针异常
原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
int[] x = { 1, 2, 3 };
x = null;
System.out.println(x[1]);
// java.lang.NullPointerException

2. ArrayIndexOutOfBoundsException 索引值越界。
原因:访问了不存在的索引值。
int[] x = { 1, 2, 3 };
System.out.println(x[3]);
//java.lang.ArrayIndexOutOfBoundsException
一数组角标越界异常:,注意:数组的角标从0开始。

数组的内存分析


Java基础___数组


二维数组 一个元素为一维数组的数组。
格式1:
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数

格式2:数据类型[][] 变量名 = new 数据类型[m][];
格式3:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
       表示获取第m+1个一维数组的第n+1个元素

应用:

/*
//需求:打印杨辉三角形
  1
  1 1
  1 2 1
  1 3 3 1
  1 4 6 4 1
  1 5 10 10 5 1
分析:看这种图像的规律
  A:任何一行的第一列和最后一列都是1
  B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
步骤:
      A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。这个n的数据来自于键盘录入。
      B:给这个二维数组任何一行的第一列和最后一列赋值为1
      C:按照规律给其他元素赋值从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
      D:遍历这个二维数组。
*/
import java.util.Scanner;
public class Demo9 {
  public static void main(String[] args) {
    // 创建键盘录入对象
    Scanner sc = new Scanner(System.in);
    // 这个n的数据来自于键盘录入。
    System.out.println("请输入一个数据:");
    int n = sc.nextInt();

    // 定义二维数组
    int[][] arr = new int[n][n];
    // 给这个二维数组任何一行的第一列和最后一列赋值为1
    for (int x = 0; x < arr.length; x++) {
      arr[x][0] = 1; // 任何一行第1列
      arr[x][x] = 1; // 任何一行的最后1列
    }
    // 按照规律给其他元素赋值
    // 从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
    for (int x = 2; x < arr.length; x++) {
      // 这里如果y<=x是有个小问题的,就是最后一列的问题
      // 所以这里要减去1
      // 并且y也应该从1开始,因为第一列也是有值了
      for (int y = 1; y <= x - 1; y++) {
       // 每一个数据是它上一行的前一列和它上一行的本列之和。
       arr[x][y] = arr[x - 1][y - 1] + arr[x - 1][y];
      }
    }