增强for循环

相对于经典for循环, foreach可以减少代码量,但不是所有情况下foreach都可以代替for循环

当需要修改元素的值或和下标相关的操作需要使用标准for循环

foreach格式

for (数组元素类型 临时变量: 遍历的对象) {}

临时变量代表的是数组的元素,而非下标

foreach对对象进行只读访问, 具有一定的安全性, 因此对数组/集合遍历时优选增强for循环

// 经典for循环
import java.util.Random; int[] arr = new int[5];
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(100) + 1;
}
for (int i = 0; i < arr.length; i++) {
int tem = arr[i];
tmp *= 10;
System.out.print(tmp + " ");
}
System.out.println();

以上代码可简化为:

int[] arr = new int[5];
Random r = new Random;
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(100) + 1;
}
for (int i: arr2) {
System.out.print((i *= 10) + " ");
}

找出数组中的最值并求和

int max, min, sum;
max = 0x80000000;
min = 0x7FFFFFFF;
sum = 0;
for (int i: arr) {
max = max > i? max: i;
min = min < i? min: i;
sum += i;
}
System.out.println("max: " + max + " min: " + min + " sum: " + sum);

删除列表中指定下标的元素, 并缩减数组

// Person.java
public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String say(Person person) {
return person.name + " " + person.age;
}
}
// Student.java
public class Student extends Person{
private String sno; public Student() {} public Student(String sno) {
this.sno = sno;
} public Student(String sno, String name, int age) {
super(name, age);
this.sno = sno;
} public String getSno() {
return sno;
} public void setSno(String sno) {
this.sno = sno;
} public void say() {
String str = super.say(this);
System.out.println(this.sno + " " + str);
}
}
// Demo.java
Student[] studentArr = new Student[5];
studentArr[0] = new Student("001", "小一", 17);
studentArr[1] = new Student("002", "大二", 18);
studentArr[2] = new Student("003", "张三", 19);
studentArr[3] = new Student("004", "李四", 17);
studentArr[4] = new Student("005", "王五", 18);
int index = 2;
int count = studentArr.length - 1;
// 将删除元素的右侧所有元素左移
for (int i = index; i < studentArr.length - 1; i++) {
studentArr[i] = studentArr[i + 1];
}
// 最后一个元素置为null
studentArr[studentArr.length - 1] = null;
// 调用student的say方法
for (Student student: studentArr) {
if (student != null){
student.say();
} else {
System.out.println(student);
}
}
System.out.println("====================="); // 缩减数组
Student[] studentArray = new Student[count];
for (int i = 0; i < studentArray.length; i++) {
studentArray[i] = studentArr[i];
} // 将旧数组指向新数组地址
studentArr = studentArray; for (Student student: studentArr) {
student.say();
}

Java -- 增强for循环(foreach)的更多相关文章

  1. “全栈2019”Java第三十二章:增强for循环Foreach语法

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Java 增强 for 循环

    Java 增强 for 循环 Java5 引入了一种主要用于数组的增强型 for 循环. Java 增强 for 循环语法格式如下: for(声明语句 : 表达式) { //代码句子 } 声明语句:声 ...

  3. java增强for循环中获取index

    java增强for循环中获取index http://rensanning.iteye.com/blog/2003205

  4. java 增强for循环与泛型

    一 增强for循环 增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.它的内部 原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作 ...

  5. Java中的增强 for 循环 foreach

    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理.能够提高性能,并减少代码出错的几率.在 J ...

  6. java 流程执行 循环 foreach循环

    一. if分支 1. 结构  if  else if   else 2.执行原则 if  if  if 结构  会一直去执行()里的判断语句 if else if  else if 结构  只要一条( ...

  7. 增强for循环 -- foreach循环

    1  作用 简化迭代器的书写格式.(注意:foreach循环的底层还是使用了迭代器遍历.) 2  适用范围 如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环. 3  格 ...

  8. JAVA增强for循环

    作用:简化数组和集合的遍历 格式:for(元素数据类型  变量 :数组或者集合) 例子: Map map=new HashMap; for(Object obj :map.keySet()){ Obj ...

  9. java 增强for循环对于空集和null的判断

    List<String> list = null; for (String str : list) {//会报空指针异常 System.out.println(str); } List&l ...

  10. Java基础系列(24)- 增强for循环

    增强for循环 这里我们先只是见一面,做个了解,之后数组部分会重点使用 Java5引入了一种主要用于数组或集合的增强型for循环 Java增强for循环语法格式如下 for(声明语句:表达式){ // ...

随机推荐

  1. 微信小程序使用echart图表不随着页面滚动

    1,问题描述 使用echarts时界面滑动时,图标不跟随滑动,浮在元素上方. 2,最简单的方法 在ec-canvas中添加,force-use-old-canvas="true", ...

  2. datetime 获取当前时间的各种格式(转)

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...

  3. 后台调用 WEBAPI 几种方式

    示例是调用谷歌短网址的API. 1. HttpClient方式: public static async void DoAsyncPost() { DateTime dateBegin = DateT ...

  4. 【项目记录】3:pyinstaller打包之后tkcalendar无法使用的解决办法

    PyInstaller 没有检测到二级导入这一事实.tkcalendar 的HowTos文档中解释了解决此问题的方法: 使用 PyInstaller 捆绑应用程序时, 检测 tkcalendar 的 ...

  5. 基础实验之访问控制列表ACL应用

     要求: 1,PC1,PC2,PC3互通 2,配置ACL限制PC2不能访问PC3 1,首先规划好IP,配置如上图 SW2配置 # vlan batch 10 20 # interface Vlanif ...

  6. if判断while循环

  7. OSIDP-线程-04

    进程和线程 进程具有两个相互独立的特点: 1.资源所有权:进程包括存放进程映像的虚拟地址空间,具有对资源的控制权. 2.调度/执行:进程具有运行状态和优先级,是可被 OS 调度和分派的实体. 通常将分 ...

  8. C语言中分治的思想-位运算

    (1) 有101个整数,其中有50个数出现了两次,1个数出现了一次, 找出出现了一次的那个数. 位运算的思想:任何数和零异或得到自己,任何数自己异或得到0. eg1.{2,1,5,1,2,2} num ...

  9. 如何用算法把一个十进制数转为十六进制数-C语言基础

    这一篇文章要探讨的是"如何用算法实现十进制转十六进制"并不涉及什么特别的知识点.属于C语言基础篇. 在翻找素材的时候,发现一篇以前写的挺有意思的代码,这篇代码里面涉及的知识点没有什 ...

  10. 树莓派 wiringPi的BCM与BOARD编码

    一.基础命令使用wiringPi库 1.1.获取管教信息 gpio readall ---获取管脚信息   1.2.BOARD编码和BCM一般都在python库中使用 import RPi.GPIO ...