JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

1、一维数组

1.1 数组的声明和初始化
声明方式:

String str[]; //不建议使用
String[] str2;

静态初始化:初始化和赋值同时进行

String[] str = new String[]{“aa”,”bb”}
String[] str2 = {“aa”,”bb”} //声明和初始化不可以分开

动态初始化:初始化和赋值分开进行

String[] str = new String[5];//5代表是数组的长度

说明: 无论是静态初始化还是动态初始化,数组一旦创建成功,数组的长度不可变。

1.2 调用数组中的元素

String[] names = new String[5];

  1. 数组的索引(下角标:是从0开始的
  2. 取值 :String str = names[0]
  3. 赋值 : names[0] = “aa”;

1.3 数组的属性 – length (数组的长度)

names.length;

1.4 数组的遍历

for (int i = 0; i < citys.length; i++) {
            System.out.println(citys[i]);
}

1.5 数组元素的默认值    

数组元素(要看具体的元素类型)的默认值和成员变量的默认值相同.

1.6 数组的内存分析

?

2、二维数组

2.1数组的声明和初始化
数组的声明:

String[][] names;
String[] names[]; //不建议
String names[][]; //不建议

静态初始化:

names = new String[][]{{“aa”,”bb”},{“cc”,”dd”}}
String[][] names = {{“aa”,”bb”},{“cc”,”dd”}}

动态初始化:

String[][] names = new String[3][2];
//3是二维数组的长度。2是二维数组元素的长度
String[][] names = new String[2][];
names[0] = new String[2];
names[1] = new String[3];

2.2调用数组中的元素

String name = names[1][0];
names[0][0] = “aa”; //赋值

2.3数组的属性 :length

String[][] s = new String[3][2];
s.length //数组的长度
s[0].length //二维数组中0位置上元素的长度

2.4数组的遍历

// 5.遍历二维数组的元素
        for (int i = 0; i < aa.length; i++) {

            String[] str = aa[i]; // 二维数组中的元素

            for (int j = 0; j < str.length; j++) {

                System.out.println(str[j]); // 遍历的是二维数组中元素(一维数组)的元素
            }
        }
        //下面的为标准的二维数组元素的遍历方式
        for (int i = 0; i < aa.length; i++) {

            for (int j = 0; j < aa[i].length; j++) {

                System.out.println(aa[i][j]); // 遍历的是二维数组中元素(一维数组)的元素
            }
        }

2.5 二维数组元素的默认值

1.二维数组元素的默认值是null

2.6 二维数组的内存分析

?

3、数组常见算法

        // 求数组元素的最大值
	public int getMaxNumber(int[] numbers) {
		int max = numbers[0];
		for (int i = 1; i < numbers.length; i++) {
			if (max < numbers[i]) {
				max = numbers[i];
			}
		}
		return max;
	}
        // 求数组元素的最小值
	public int getMinNumber(int[] numbers) {
		int min = numbers[0];
		for (int i = 1; i < numbers.length; i++) {
			if (min > numbers[i]) {
				min = numbers[i];
			}
		}
		return min;
	}

	// 求数组元素的总和
	public int getSum(int[] numbers) {
		int sum = 0;
		for (int i = 0; i < numbers.length; i++) {
			sum += numbers[i];
		}
		return sum;
	}

	// 求数组元素的平均值
	public int getAvg(int[] numbers) {
		int sum = getSum(numbers);
		return sum / numbers.length;
	}

	// 数组的复制
	public int[] getCopyArray(int[] numbers) {
		int[] copyNumber = new int[numbers.length];
		for (int i = 0; i < numbers.length; i++) {
			copyNumber[i] = numbers[i];
		}
		return copyNumber;
	}

	// 数组的反转
	public void reverse(int[] numbers) {
		// 数组的反转
		System.out.println();
		for (int i = 0, j = numbers.length - 1; i < numbers.length / 2; i++, j--) {
			int temp = numbers[i];
			numbers[i] = numbers[j];
			numbers[j] = temp;
		}
	}

	//线性查找
	public int searchNumber(int[] numbers,int findNumber){
		int index = -1; //查找的数据所在的索引值。
		for (int i = 0; i < numbers.length; i++) {
			if(findNumber == numbers[i]){
				index = i;
				break;
			}
		}
		return index;
	}

	//排序
	//boo 为false从小到大,如果为true 从大到小
	public void sort(int[] numbers,boolean boo){

		if(boo){
			for (int i = 0; i < numbers.length - 1; i++) { //循环几轮
				for (int j = 0; j < numbers.length - 1 - i; j++) { // 循环几次

					if(numbers[j] < numbers[j + 1]){
						int temp = numbers[j];
						numbers[j] = numbers[j + 1];
						numbers[j + 1] = temp;
					}
				}
			}
		}else{
			for (int i = 0; i < numbers.length - 1; i++) { //循环几轮
				for (int j = 0; j < numbers.length - 1 - i; j++) { // 循环几次

					if(numbers[j] > numbers[j + 1]){
						int temp = numbers[j];
						numbers[j] = numbers[j + 1];
						numbers[j + 1] = temp;
					}
				}
			}
		}
	}

冒泡算法:

        冒泡排序:
        for (int i = 0; i < numbers.length - 1; i++) { //循环几轮
        for (int j = 0; j < numbers.length - 1 - i; j++) { // 循环几次

			if(numbers[j] < numbers[j + 1]){
				int temp = numbers[j];
				numbers[j] = numbers[j + 1];
				numbers[j + 1] = temp;
			}
	        }
        }

4、Arrays工具类的使用

?

5、数组常见异常

第一种 : 空指针异常 - NullPointerException
第二种 :下角标越界 - IndexOutofBoundsException

代码:

    public static void main(String[] args) {

        int[] numbers = new int[2];

        //下角标越界
//        numbers[2] = 5;
//        System.out.println(numbers[2]);

//        numbers[-1] = 5; //下角标越界

//        System.out.println(numbers[2]);//下角标越界

        //空指针异常
        String[] persons = new String[2];
        //将字符串中的字符全部转成大写
        System.out.println("aaaa".toUpperCase());
        //下面会报空指针异常,因为persons[0]中的元素是null
//        System.out.println(persons[0].toUpperCase());

        String[][] persons2 = new String[2][];
//        System.out.println(persons[0].charAt(0)); //空指针异常

        String[] names = {"aa","bb"};
        System.out.println(names[0].toUpperCase());

        //其它常见的空指针异常
        ArrayException exception = new ArrayException();
        Person person = null;
//        person = new Person();
        System.out.println(exception);
        System.out.println(person);
        exception.personShow(person);
    }

    public void personShow(Person person){
        person.show();
    }

6、可变个数形参

格式:方法名(变量类型...变量名)
说明:

    1. 可变形参的个数可以是0个1个或者多个
    2. 如果一个方法中除了可变形参还有其它的参数,那么可变形参必须放在最后。
    3. 一个方法中只能有一个可变形参
    4. 可变参数方法的使用与方法参数部分使用数组是一致的

原文地址:https://www.cnblogs.com/wushaopei/p/12204097.html

时间: 2024-11-17 15:53:37

JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组的相关文章

数组,一维,二维,多维

数组 一维数组 数组初始化,创建数组,数组长度为5 int [] array=new int[5]; array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; 直接赋值的数组 int[] array1 = new int[] {1,2,3,4,5 }; 数组,在创建的时候,需要规定数据类型,初始长度 二维数组 int [,] shuzu = new int[3,4]; 3     表示有3个一维数组 4     表

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

一维数组建模表示二维的棋盘状态

当我们想写一个棋类游戏的时候,不难发现,很多棋类游戏的棋盘都可以用一个二维数组表示,比如: 井字棋(3*3的二维数组).黑白棋(8*8的二维数组).五子棋(15*15的二维数组)等等 使用二维数组表示棋盘,数组的下标就是棋子的坐标,数组中的值就是棋子的状态. 好处就是数据访问比较直观,可直接根据下标快速找到某个位置的棋子的状态. 但缺点也是很明显的 比如: 首先是遍历棋盘需要用双重循环处理横坐标跟纵坐标: 其次是判断棋子状态,比如以上所说的三种棋子,需要判断行.列以及斜线8个方向上的棋子状态,因

把一维数组转换成二维数组

有一个一维数组,想把它变成m*n形式的二位数组, $arr = array(....); // 一维数组 $m = ceil(count($arr)/n); $array = array(); for ($i = 0, $j = 0; $i < $m; $i++) { for ($k = 0; $k < n; $k++) { $temp = $arr[$j++]; if($temp) $array[$i][$k] = $temp; } } 把一维数组转换成二维数组

php获取一维,二维数组长度的方法(有实例)

在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧.php如何获取数组的长度,使用php函数count(),或是sizeof()例如: 复制代码代码如下: $arr = Array('0','1','2','3','4'); echo count($arr);// 输出 5$arr = array('A','B','C');echo sizeof($arr);//输出3 sizeof()和c

PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组'; } else { echo '不是一维数组'; } PHP手册: int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)

1 //数组间的关系arr[]中的数字为几,[]内就有几个数 2 //{ }内的数是从0开始,如需要打印应从0开数 3 如{2,6,9,8,7}打印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int main() 7 { 8 int arr[] = { 1,2,3,4,8}; 9 10 printf("%d\n", arr[3]); 11 12 system("pause");

C语言malloc函数为一维,二维,三维数组分配空间

c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请所取空间的大小,因为没有在声明部分定义它们为变量或数组,所以不能通过变量名或数组的方式去引用这些数据,只能通过指针来引用. 对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数. 接下来写一下malloc函数如何实现为一维,二维,三维数

将一维数组转化成二维数组

<nz-table #colSpanTable [nzData]="temp" nzBordered> <tbody> <ng-container *ngFor="let row of temp;let i = index"> <tr> <td *ngFor="let title of row">{{title.AreaCodesName}}</td> </tr>

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制