更新时间:2021-04-01 来源:黑马程序员 浏览量:
虽然Iterator可以用来遍历集合中的元素,但写法上比较烦琐,为了简化书写,从JDK5开始,提供了foreach循环。foreach循环是一种更加简洁的for循环,也称增强for循环。foreach循环用于遍历数组或集合中的元素,具体语法格式如下:
for(容器中元素类型临时变量:容器变量){ 执行语句 }
从面的格式可以看出,与for循环相比,freach 循环不需要获得容器的长度,也不需要根据索引访容器中的元素,但它会自动遍历容器中的每个元素。下面通过一个案例演示foreach循环的用法,如文件6-5所示。
文件Example05.Java
import java.util.*; public static void main (String[] args) { ArrayList list= new Arravtiotsn ( ); //创建ArrayList集合 list.add ("aaa") // 向ArrayList集合中添加字符串元素 list. add ( "bbb") list.add ("CCC"); for (Object obj : list){ // 使用foreach循环遍历ArravList对象 System.out.println (obi) : //取出并打印ArrayList集合中的元素 } } }
在6-6文件中,第4~7行代码是声明了一一个ArrayList集合并向集合中添加了3个元素;第8行代码使用foreach循环遍历ArrayList集合并打印。可以看出,foreach循环在遍历集合时语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了。foreach循环的次数是由容器中元素的个数决定的,每次循环时,foreach中都通过变量将当前循环的元素记住,从而将集合中的元素分别打印出来。
foreach循环的局限性
foreach循环虽然书写起来很简洁,但在使用时也存在一定的局限性。当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。下面以一个String类型的数组为例,演示foreach循环的局限性,如文件6-6 所示。
文件6-6 Example06.java
public class Example06 { static String[] strs = {"aaa",, "bbb", "ccc" ); public static void main (String[] args){ //foreach 循环遍历数组 for (string str: strs) { str ="ddd"; } System.out.println ("foreach循环修改后的数组:"+ strs[0] +","+ rs[1]+","+strs[2]); for循环遍历数组 For(int i = 0;i< strs.length; 1++) { strs[i] = "ddd"; } System.out.printin ("普通for循环修改后的数组:"+ strs[0] +"," + strs[i] "+strs[2]) ; }
文件6-6的中,分别使用foreach循环和普通for循环去修改数组中的元素。从图6-12中的运行结果可在文件6-6循环并不能修改数组中元素的值。原因是第6行代码中的str="ddd"只是将临时变量str指向了一个新的字符串,这与数组中的元素没有一点关系。而在普通for循环中,是可以通过索引的方式来引用数组中的元素并对其值进行修改的。
[案例1] 库存管理系统
像商城和超市这样的地方,都需要有自己的库房,并且库房商品的库存变化应有专人记录,这样才能保证商城和超市正常运转。
”区编写一个程序,模拟库存管理系统。该系统主要包括系统首页、商品入库功能、商品显示和删除商品功能。系统首页及每个功能的具体要求如下。
(1)系统首页:用于显示系统所有的操作,并且可以选择使用某一一个功能。
(2)商品人库功能:首先提示是否要录人商品,根据用户输人的信息判断是否需要录人商品。如果需要录人商品,则需要用户输人商品的名称、颜色、价格和数量等信息。录入完成后,提示商品录人成工并打印所有商品。如果不需要录入商品,则返回系统首页。
(3)商品显示功能:用户选择商品显示功能后,在控制台打印仓库所有商品信息。
(4)删除商品功能:用户选择删除商品功能后,根据用户输人的商品编号删除商品,并在控制台打印除后的所有商品。
注意:本案例要求使用Cllection集合存储自定义的对象,并用迭代器、增强for循环遍历集合。
[案例2] 学生管理系统
在所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写个学生管理系统, 实现对学生信息的添加、删除、修改和查询功能。系统首页及每个功能的具体要求如下。
(1)系统首页:用于显示系统所有的操作,并根据用户在控制台的输人选择需要使用的功能。
(2) 查询功能:用户选择该功能后,在控制台打印所有学生的信息。
(3)添加功能:用户选择该功能后,要求用户在控制台输人学生学号、姓名、年龄和居住地的基本信息。在输人学导时,判断学号是否被占用,如果被占用则添加失败,并给出相应的提示:反之则提示添加成功。
(4)删除功能:用户选择该功能后,提示用户在控制台输人需要删除学生的学号,如果用户输人的学号存在则提示删除成功,反之则提示删除失败。
(5)修政能:用户选择该功能后,提示用户在控制台输人需要修改的学生学号、姓名年龄利居住地学生价息、并使用输人的学生学号判断是否有此人,如果有则修改原有的学生信息,反之则提乐需要核成的,学生信息不存在。
(6)退出功能:用户选择该功能后,程序正常关闭。
注意:本案例要求使用List集合存储自定义的对象,使用List集合中的常用方法实现相关的操作。
猜你喜欢: