for(int i:a) (java学习)

本文对比了两种Java数组遍历方法,一种使用增强for循环正常输出数组元素,另一种尝试使用相同循环结构但试图通过索引访问元素导致数组越界错误。文章详细解释了为何在增强for循环中直接使用变量作为索引会导致错误,并提供了正确的遍历数组的方法。
void c()
	{
		int a[] = {1,2,3,4,5,6,7};
		
		for(int i :a)
		{
			System.out.println(i);
		}
	}

void c()
	{
		int a[] = {1,2,3,4,5,6,7};
		
		for(int i :a)
		{
			System.out.println(a[i]);
		}
	}

两种不同的方式输出,但是第二种出现错误提示,说数据越界

原因:在这种循环的写法下,i获取的是数组a中的每一个元素的值,而不是数组的下标,当读取到a[6]时,i= 7;这时输出a[7]发生越界。

`for(int i:end)` 并非标准的 Java 语法。在 Java 里,正确的增强 `for` 循环(也被叫做 `for-each` 循环)语法是 `for(元素类型 元素变量 : 可迭代对象)`,它一般用于遍历数组或者实现了 `Iterable` 接口的集合类,像 `List`、`Set` 等。 ### 含义 增强 `for` 循环的作用是依次从可迭代对象里取出元素,再把这些元素赋值给指定的元素变量,接着执行循环体里的代码。例如: ```java import java.util.ArrayList; import java.util.List; public class ForEachExample { public static void main(String[] args) { // 创建一个包含整数的列表 List<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); // 使用增强 for 循环遍历列表 for (int i : numbers) { System.out.println(i); } } } ``` 在这个例子中,`numbers` 是一个 `List` 集合,`for (int i : numbers)` 循环会逐个取出 `numbers` 里的元素,然后把元素赋值给变量 `i`,最后打印出 `i` 的值。 ### 使用场景 增强 `for` 循环适用于以下场景: - **遍历数组**:当需要遍历数组中的每个元素时,可以使用增强 `for` 循环。 ```java public class ArrayTraversal { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; for (int i : array) { System.out.println(i); } } } ``` - **遍历集合**:对于实现了 `Iterable` 接口的集合类,增强 `for` 循环能够简洁地遍历集合中的所有元素。 ```java import java.util.HashSet; import java.util.Set; public class SetTraversal { public static void main(String[] args) { Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); for (int i : set) { System.out.println(i); } } } ``` ### 可能出现的问题 - **语法错误**:若 `end` 不是数组或者实现了 `Iterable` 接口的集合类,就会产生编译错误。例如: ```java public class WrongUsage { public static void main(String[] args) { int end = 10; // 编译错误,end 不是可迭代对象 for (int i : end) { System.out.println(i); } } } ``` - **无法获取索引**:增强 `for` 循环只能访问元素,不能直接获取元素的索引。要是需要索引信息,就得使用传统的 `for` 循环。 ```java public class IndexAccess { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; // 需要索引信息,使用传统 for 循环 for (int i = 0; i < array.length; i++) { System.out.println("Index: " + i + ", Value: " + array[i]); } } } ``` - **不能修改集合结构**:在增强 `for` 循环里不能对集合的结构进行修改(如添加、删除元素),不然会抛出 `ConcurrentModificationException` 异常。 ```java import java.util.ArrayList; import java.util.List; public class ModifyCollection { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 会抛出 ConcurrentModificationException 异常 for (int i : list) { if (i == 2) { list.remove((Integer) 2); } } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值