java基础----数组

1数组

数组是什么?内存中一块连续的空间,数量是固定的,存储相同的数据类型

特点:

​ 长度:数组中最多可以存储几个数据。

​ 数组名:快速找到数组中存储的数据

​ 元素:数组名 [下标] 数组中存的数据

​ 数组的数据类型:数组中存储数据的数据类型

​ 下标、索引 范围[0,长度-1],可能引发数字下标越界异常

2.2数组的使用

声明数组-----告诉内存数据类型

数据类型[ ] 数组名;

int[] nums;

开空间----申请几个连续的空间

nums=new int[7];

边声明,边开空间

char[ ] a=new char[2];

长度:

int len=nums.length;

获取元素:数据名[下标]

系统会给数组分配默认值,int---0,double---0.0 boolean----false String----null

null 引用类型特殊值

int num=nums[0];

存储数据---赋值

nums[0]=123;

简便赋值的方法:

int[ ] num={1,2,3,4,5}

char[ ] cs;

cs=new char[ ]{'1','b'};

float[ ] fs=new float[ ] {1.3f,2.5f};\

通过键盘的输入赋值

for (int i = 0; i <=num,length; i++) {}

遍历

for (int i = 0; i <=num,length; i++) {

​ System.out.print(num[i]);

}

增强 for foreach 不能去修改内部数据

for (int n: nums){ nums的值赋给n

System.out.print(n);

}

数组的使用场景:多个相同数据类型的数据存储,更方便的操作(查找,排序,最值等)

数组的应用:

2.2.1查找

2.2.2最值

课后练习:

一、一组成绩67,90,-20,105,88,92,请将负分改为0,超过100的置为100,然后输出


public class Test810 {
	public static void main(String[] args) {
		int[] num = new int[] { 67, 90, -20, 105, 88, 92 };
		int num1 = 0;
		int num2 = 100;

		for (int i = 0; i < num.length; i++) {
			if (num[i] < 0) {
				num[i] = num1;
			}
			if (num[i] > 100) {
				num[i] = num2;
			}
			System.out.print(num[i] + " ");
		}
	}
}

二、有一个数列:8,4,2,1,23,344,12

1.循环输出数列的值

2.逆序(与原数列顺序相反)输出数列的值

3.求数列中所有数值的和

4.猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数

import java.util.Scanner;

public class Test809 {
	public static void main(String[] args) {
		int[] num = new int[] { 8, 4, 2, 1, 23, 344, 12 };
		for (int i = 0; i < num.length; i++) {
			System.out.print(num[i] + " ");
		}
		System.out.println();

		for (int i = 6; i >= 0; i--) {
			System.out.print(num[i] + " ");
		}
		System.out.println();

		int he = 0;
		for (int i = 0; i < num.length; i++) {
			he += num[i];
		}
		System.out.print("所有数值的和为:" + he);
		System.out.println();

		Scanner sc = new Scanner(System.in);
		boolean f = false;// false不包含
		System.out.print("请入数字:");
		int n = sc.nextInt();
		for (int i = 0; i < num.length; i++) {
			if (num[i] == n) {
				f = true;
				break;
			}
		}
		if (f) {
			System.out.print("包含");
		} else {
			System.out.print("不包含");
		}
	}
}

三、循环输入近6年某高校的录取分数,求出平均分和最低分

import java.util.Scanner;

public class Test808 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int[] lq = new int[6];// lq=录取分数
		int he = 0;// he=分数总和
		int num;
		System.out.println("请输近六年的录取分数:");
		for (int i = 0; i < lq.length; i++) {
			num = sc.nextInt();
			lq[i] = num;
			he+=lq[i];
		}
		int min=lq[0];
		for (int i = 0; i < lq.length; i++) {			
			if(min>lq[i]) {
				min=lq[i];
			}
		}
		 double ping = he / 6.0;
		System.out.println("录取平均分数为:"+ping+"最低分为"+min);
	}
}

四、判断数组是否相同

对于两个整数数组,如果长度相同,且每个元素也都相同,我们就认为这两个数组相同。

public class Test9 {
	public static void main(String[] args) {
		int[] num1 = { 1, 2, 3, 4, 5, 6, 7 };
		int l1 = num1.length;
		int[] num2 = { 1, 2, 3, 4, 5, 6, 7 };
		int l2 = num2.length;
		int count = 0;
		if (l1 == l2) {
			for (int i = 0, j = 0; i < num1.length; i++, j++) {
				if (num1[i] == num2[j]) {
					count++;
				}
			}
			if (count == num1.length) {
				System.out.println("相同");
			} else {
				System.out.println("不相同");
			}
		} else {
			System.out.println("不相同");
		}

	}
}

<think>好的,用户现在问的是Java入门中的数组基础。我需要先回想一下之前的对话历史,用户之前问过关于IDEA的解释,现在转向Java基础,说明他们可能刚开始学习编程,或者是想巩固基础知识。首先,用户的需求是了解数组基础知识,作为Java入门的一部分。我需要确保内容结构清晰,符合用户提到的系统级指令,比如行内数学公式用$...$,独立公式用$$...$$,同时用中文回答。 首先,数组Java中的基本数据结构,必须涵盖定义、声明、初始化、访问元素、遍历、多维数组、常见操作以及注意事项。可能需要分点来讲解,每个部分都要简明扼要,同时确保例子正确,语法无误。比如在声明数组的时候,有两种方式:数据类型[] 数组名 或者 数据类型 数组名[],但推荐前者。初始化部分要分静态和动态,静态初始化是在声明时赋值,动态是使用new关键字,之后赋值。 需要注意Java数组的索引从0开始,越界会抛异常,这点很重要。遍历部分可以用for循环或增强for循环,需要给出例子。多维数组部分,特别是二维数组,需要说明如何声明和初始化,并给出例子,比如二维数组的静态和动态初始化。 常见操作部分,用户可能需要知道如何获取长度,使用Arrays类的方法,比如排序、填充、复制等。注意事项里,数组长度不可变,引用类型的问题,以及性能考虑,比如连续内存分配和随机访问效率高,但增删元素效率低。这些都需要清晰列出。 另外,用户可能作为初学者,需要避免常见的错误,比如数组越界、空指针异常,这些在注意事项里提到会比较有帮助。同时,可能需要强调数组是对象,存储在堆内存中,而数组变量是引用,这点对于理解数组的传递和复制很重要。 还要检查是否有需要使用的数学公式,比如在解释数组长度时,可能用$length = n$,或者在多维数组中的表示,比如二维数组可以看作矩阵,用$array[i][j]$表示元素。不过根据之前的回答例子,可能不需要太多数学公式,但需要确保行内公式正确使用$符号。 最后,确保结构符合用户的要求,分点明确,步骤清晰,例子正确,并且用中文回答。同时,要检查是否有遗漏的部分,比如数组的默认值,当动态初始化时,元素会有默认值,比如int数组初始为0,对象数组为null,这也是需要注意的点。</think>我们将以结构化方式解析Java数组的核心知识点,重点标注$\boxed{关键语法}$和易错点: --- ### 一、数组定义与特性 $$数组 = \text{相同数据类型} \times \text{连续内存空间} \times \text{固定长度}$$ - **核心属性**: 1. 索引系统:$\boxed{下标从0开始}$,访问越界触发`ArrayIndexOutOfBoundsException` 2. 长度固定:$\boxed{array.length}$为最终属性(声明后不可变) 3. 堆内存分配:数组是$\boxed{对象}$,通过引用访问 --- ### 二、声明与初始化 #### 1. 声明方式对比 | 类型 | 语法示例 | 内存状态 | |---------------|---------------------------|-------------| | 声明未初始化 | `int[] arr;` | 仅创建引用 | | 静态初始化 | `int[] arr = {1,3,5};` | 立即分配内存 | | 动态初始化 | `int[] arr = new int[3];` | 分配默认值 | #### 2. 默认值规则 - 数值类型:$\boxed{0}$(int/double等) - 布尔类型:$\boxed{false}$ - 引用类型:$\boxed{null}$ --- ### 三、核心操作 #### 1. 元素访问(时间复杂度$O(1)$) ```java int[] scores = new int[]{90,85,77}; System.out.println(scores[1]); // 输出85 scores[2] = 80; // 修改第三个元素 ``` #### 2. 数组遍历(时间复杂度$O(n)$) ```java // 传统for循环 for(int i=0; i < scores.length; i++){ System.out.println(scores[i]); } // 增强for循环(只读访问) for(int score : scores){ System.out.println(score); } ``` --- ### 四、多维数组 #### 1. 二维数组本质:$\boxed{数组数组}$ ```java // 静态初始化 int[][] matrix = {{1,2}, {3,4,5}}; // 动态初始化 double[][] data = new double[2][3]; ``` #### 2. 不规则数组 ```java String[][] names = new String[2][]; names[0] = new String[3]; // 第一行3列 names[1] = new String[2]; // 第二行2列 ``` --- ### 五、工具类应用 #### `java.util.Arrays`常用方法 | 方法 | 功能描述 | 示例 | |------------------------|------------------------|--------------------------------| | `sort()` | 数组排序 | `Arrays.sort(arr);` | | `binarySearch()` | 二分查找 | `Arrays.binarySearch(arr,5);` | | `copyOf()` | 数组复制 | `int[] copy = Arrays.copyOf(arr,5);` | | `fill()` | 填充默认值 | `Arrays.fill(arr, 0);` | --- ### 六、典型错误案例 1. **长度混淆**: ```java int[] arr = new int[5]; System.out.println(arr[5]); // 抛出ArrayIndexOutOfBoundsException ``` 2. **空指针异常**: ```java int[][] arr = new int[3][]; System.out.println(arr[0][0]); // 第二维未初始化,触发NullPointerException ``` 3. **引用陷阱**: ```java int[] a = {1,2,3}; int[] b = a; // b与a指向同一数组对象 b[0] = 9; // 修改会影响a[0]的值 ``` --- ### 七、最佳实践建议 1. **内存优化**:优先使用基本类型数组而非包装类数组 2. **防御性编程**:关键操作前检查`array != null && index < array.length` 3. **集合替代**:频繁增删数据时建议使用`ArrayList` 是否需要通过具体代码案例进一步演示数组操作细节?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值