Java学习笔记(39)—— Iterator接口

这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


一、Iterator接口

1.1 概述

  • 迭代器父接口
  • 需要注意的是:迭代遍历期间,不允许直接使用集合增删数据

​​​​​​​​​​​​​​1.2 方法

  • next()

​​​​​​​​​​​​​​把迭代器的指向移到下一个位置,同时,该方法返回下一个元素的引用。​​​​​​​​​​​​​​

  • hasNext()

​​​​​​​​​​​​​​该方法会判断集合对象是否还有下一个元素,如果已经是最后一个元素则返回false。​​​​​​​​​​​​​​

  • remove()

从迭代器指向的集合中移除刚刚取出的数据

1.3 练习:士兵数量

package 士兵数量;

import java.util.Random;

/*
 *	封装:
 *		AK47武器相关的属性数据、运算代码封装成一个类组件 
 */
public class AK47 {
	int bullets = 25;
	// 开火
	public void fire() {
		// 判断开火前,当前是否有子弹剩余
		if(bullets == 0) {
			System.out.println("没有子弹,我们不能开枪!");
			return;
		}
		
		// 随机发射子弹数量
		int r= new Random().nextInt(5)+3;
		// 判断弹夹可用子弹数,是否满足发射要求
		if(r > bullets) {
			r = bullets;
		}
		bullets -=r;
		// 开枪
		for(int i = 0;i<r;i++) {
			System.out.print("突");
		}
		System.out.println("~!");
		
		if(bullets == 0) {
			System.out.println("弹夹空了!");
		}
	}

	public void reload() {
		bullets = 25;
	}
}
package 士兵数量;

import java.util.Random;
import java.util.Scanner;

/*
 *	封装:
 *		1.士兵相关的属性数据、逻辑运算方法,封装成一个Soldier类组件 
 *		2.定义一个成员变量A47()类
 */
public class Soldier{
	// 成员变量or属性变量
	private int id;
	private int blood = 100;
	private AK47 ak47; // 添加一个AK47()武器类的成员变量
	// 静态成员变量
	static int count;
	
	public Soldier(int id){
		// this是一个特殊引用,其引用当前对象的内存地址
		// 在编写类内代码时,可以省略
		this.id = id;
		// 静态属于类,一般使用类名调用
		Soldier.count++; // 类内可以省略
	}
	
	// 成员方法
	public void go() {
		System.out.println(id+"号士兵前进!");
	}
	
	public void attack() {
		// 判断是否是活着的士兵
		if(blood == 0) {
			System.out.println("这是"+id+"士兵的尸体");
			return;
		}
		System.out.println(id+"号士兵进攻!");
		
		// 射击
		if(ak47 != null) {
			ak47.fire();// 调用AK47发射子弹 
		}else {
			System.out.println("小拳拳捶你胸口!");
		}
		if(ak47.bullets == 0) { // 当子弹为0时,自动装弹
			ak47.reload();
		}
		
		// 模拟进攻,随机掉血
		int des = new Random().nextInt(5)+10;
		blood -= des;
		// 不允许出现负血值
		if(blood < 0) {
			blood = 0;
		}
		System.out.println("血量:"+this.blood);
		// 血量是0,则阵亡
		if(blood == 0) {
			System.out.println(id+"号士兵阵亡了!");
			// 士兵死亡,士兵数量递减
			Soldier.count--;
		}
	}
	
	public int getId() {
		return id;
	}
	
	public int getBlood() {
		return blood;
	}
	
	public void setAk47() {
		ak47 = new AK47();
	}	
}
package 士兵数量;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

/*
 *	用集合存放士兵。若士兵阵亡,则从集合移除,直到集合为空 
 */
public class Test1 {
	public static void main(String[] args) {
		System.out.println("需要多少士兵!");
		int n = new Scanner(System.in).nextInt();

		ArrayList<Soldier> list = new ArrayList<Soldier>(n);
		for(int i = 0;i<n;i++) {
			Soldier s = new Soldier(i+1);
			s.setAk47();
			list.add(s);
		}
		System.out.println(list);
		// 当有存活的士兵
		while(list.size()!=0) {
			new Scanner(System.in).nextLine();
			// 迭代遍历
			Iterator<Soldier> it = list.iterator();
			while(it.hasNext()) {
				Soldier s = it.next();
				s.attack();
				// 迭代遍历期间,不允许直接使用集合来增删数据
				// 即不允许直接使用list.remove(s);
				if(s.getBlood()==0) {
					it.remove();// 不指定下标或数据,删除刚刚遍历取出的数据
				
				System.out.println("士兵数量:"+list.size());
				System.out.println("--------------------------------------------");
				}
			}
			
		}		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值