任务一
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("游戏结束,最终结果是你输了");
}
}
总结
今天的任务不是很难,重点在于方法之间的互相调用,只要整理清楚逻辑,就能完成任务。