面向对象训练任务思路

任务一

import java.util.Arrays;

public class MyList {
	private Object[] element = new Object[10];
	private int addIndex = 0;

	@Override
	public String toString() {
		return "MyList [element=" + Arrays.toString(element) + "]";
	}

	public void add(Object o) {// 增加方法
		if (addIndex < element.length) {
			element[addIndex] = o;
			addIndex++;
		} else {
			element = addLengthArray(element);
			element[addIndex] = o;
			addIndex++;
		}
	}

	public static Object[] addLengthArray(Object[] array) {
		Object[] newArray = new Object[array.length * 2];
		// 将array数组从0位置至array.length位置,复制到newArray数组0位置到array.length位置。
		System.arraycopy(array, 0, newArray, 0, array.length);
		return newArray;
	}

	public void remove(int i) {// 根据下标删除
		if (i >= 0 && i < element.length) {
			for (int j = i; j < element.length - 1; j++) {
				element[j] = element[j + 1];
			}
			element[element.length - 1] = null;
			addIndex--;
		} else {
			System.out.println("输入有误");
		}
	}

	public void remove(Object o) {// 根据数据删除
		for (int i = 0; i < element.length; i++) {
			if (o.equals(element[i])) {
				for (int j = i; j < element.length - 1; j++) {
					element[j] = element[j + 1];
				}
				element[element.length - 1] = null;
				addIndex--;
				break;
			}
			if ((i == element.length - 1) && (o.equals(element[i]) == false)) {// 没找到这个数据
				System.out.println("未找到该数据");
			}
		}

	}

	public Object get(int i) {
		if (i >= 0 && i < element.length) {
			return element[i];

		} else {
			System.out.println("输入有误");
			return null;
		}
	}

	public void getSize() {
		System.out.println("数组中有效数据有"+addIndex+"个");;
	}
}

1、增加方法

public void add(Object o) {// 增加方法
		if (addIndex < element.length) {
			element[addIndex] = o;
			addIndex++;
		} else {
			element = addLengthArray(element);
			element[addIndex] = o;
			addIndex++;
		}
	}

我定义了一个addIndex变量,用来表示下一次添加数据时的数组下标
当addIndex在数组范围外时,调用addLengthArray()方法对数组进行扩容

public static Object[] addLengthArray(Object[] array) {
		Object[] newArray = new Object[array.length +10];
		// 将array数组从0位置至array.length位置,复制到newArray数组0位置到array.length位置。
		System.arraycopy(array, 0, newArray, 0, array.length);
		return newArray;
	}

2、删除方法

public void remove(int i) {// 根据下标删除
		if (i >= 0 && i < element.length) {
			for (int j = i; j < element.length - 1; j++) {
				element[j] = element[j + 1];
			}
			element[element.length - 1] = null;
			addIndex--;
		} else {
			System.out.println("输入有误");
		}
	}

	public void remove(Object o) {// 根据数据删除
		for (int i = 0; i < element.length; i++) {
		
			if (o.equals(element[i])) {
				for (int j = i; j < element.length - 1; j++) {
					element[j] = element[j + 1];
				}
				element[element.length - 1] = null;
				addIndex--;
				break;
			}
			if ((i == element.length - 1) && (o.equals(element[i]) == false)) {// 没找到这个数据
				System.out.println("未找到该数据");
			}
		}

	}

通过重载的方式来实现两种方式(下标、数据)的删除
同时在删除之后addIndex-1,这样我在下次添加数据时就能正确的添加到数组中。

任务二 石头剪刀布

1、电脑要随机出(石头剪刀布)

public String computerMove() {//电脑随机生成一种
		int i = (int) (Math.random() * 3);
		if (i == 0) {
			return "石头";
		} else if (i == 1) {
			return "剪刀";
		} else {
			return "布";
		}
	}

2、判断当前对局胜负

public void compare(String player, String computer) {//对比出拳情况判断对局胜负
		if (player.equals(computer)) {
			System.out.println("电脑出了"+computer);
			System.out.println("平局");
			showScore();
		}
		if ((player.equals("石头") && computer.equals("剪刀")) || (player.equals("剪刀") && computer.equals("布"))
				|| (player.equals("布") && computer.equals("石头"))) {
			System.out.println("电脑出了"+computer);
			System.out.println("你赢了");
			playerScore++;
			showScore();
		}
		if ((player.equals("剪刀") && computer.equals("石头")) || (player.equals("布") && computer.equals("剪刀"))
				|| (player.equals("石头") && computer.equals("布"))) {
			System.out.println("电脑出了"+computer);
			System.out.println("你输了");
			computerScore++;
			showScore();
		}
	}

3、每小局结束后显示积分情况

public void showScore() {//显示双方的积分
	System.out.println("玩家积分为:" + playerScore);
	System.out.println("电脑积分为:" + computerScore);
}

4、让用户输入要出(剪刀石头布)的哪一个,调用上面的方法判断小局输赢,并判断最终胜负

	public void game(int n) {// n为总局数
		Scanner input = new Scanner(System.in);
		String player;
		for (int i = 0; i < n; i++) {
			System.out.println("请输入“石头”、“剪刀”或者“布”");
			player = input.nextLine();
			compare(player, computerMove());
		}
		
		//对局结束时判断输赢
		if(playerScore==computerScore) {
			System.out.println("游戏结束,最终结果为平局");
		}
		if(playerScore>computerScore) {
			System.out.println("游戏结束,最终结果是你赢了");
		}
		if(playerScore<computerScore) {
			System.out.println("游戏结束,最终结果是你输了");
		}
	}

总结

今天的任务不是很难,重点在于方法之间的互相调用,只要整理清楚逻辑,就能完成任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值