Java人机猜拳运行有bug,无奈没学好解不出bug所在,求大神指教,bug怎么解决,问题出在何处?

/**

  • *左右互博——————人机交换猜拳游戏
  • 游戏规则:
  • 1.游戏开始后,提示欢迎页面,让用户选择电脑角色,进行人机游戏
  • 2.开始游戏后,玩家根据提示输入自己选择的的角色和电脑角色出拳,系统判定胜负并积分
  • 3.每局游戏比赛五场制,采用三局两胜制,最后打印出胜利一方的信息
  • ps:抵制盗版游戏,合理安排游戏时间,享受健康生活
  • @author 王欣
  • *@version 1.3.97 * */

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

public class cai {
private static final String Random = null;
String enemyName = "";
int jf = 0;
Scanner input = new Scanner(System.in);
public static void main(String[] args) {
cai quan = new cai();
quan.showMenu();
}

// 方法--1:欢迎菜单
public void showMenu() {
    System.out.println("\n\n\n"); 
    System.out.println("\t**********迷你猜拳小游戏**********");
    System.out.println();
    System.out.println("\t\t         游戏开始!");
    // Scanner 监听我们键盘输入的内容,将输入的内容传输给程序
    System.out.println("\t请选择你的对手:(1.孙尚香  2.嫦娥  3.妲己  )");
    System.out.print("\t\t");
    int dui = input.nextInt();


    if (dui == 1 || dui == 2 || dui == 3) {
        System.out.print("\t\t");
        String myName = "";
        System.out.println(dui);
        System.out.println("\t请输玩家的名字:");
        System.out.print("\t\t");
        myName = input.next();
        switch (dui) {
        case 1:
            enemyName = "孙尚香";
            break;
        case 2:
            enemyName = "嫦娥";
            break;
        case 3:
            enemyName = "妲己";
            break;
        }
        System.out.println("\t" + myName + "  VS  " + enemyName);

        System.out.println("\t是否确定开始游戏?(按YES开始;按NO退出游戏)");
        System.out.print("\t\t");
        String kai = input.next();
        if (kai.equalsIgnoreCase("YES")) {
            // 游戏开始:
            System.out.println();
            play();
        }else if(kai.equalsIgnoreCase("NO")) {
            System.out.println("\t游戏程序已退出!");
        }else {
            System.out.println("\t你输入错误!");
        }
    } else {
        System.out.println("\t你输入错误!");
    }
}

public void play() {
    int myfen = 0;
    int enemyfen = 0;
    for (int i = 0; i < 5; i++) {
        System.out.println("\t-----第" + (i + 1) + "回合-----");
        System.out.println("\t请出拳(1.石头  2.剪刀  3.布):");
        System.out.print("\t\t");
        int temp1 = input.nextInt();
        String myChoose = change(temp1);

        Random rd = new Random();
        int temp2 = rd.nextInt(3) + 1;

        String enamyChoose = change(temp2);
        System.out.println("\t你的选择是:" + myChoose);
        System.out.println("\t对手的选择是:" + enamyChoose);
        input.close();
        switch (temp1) {
        case 1:
            if (temp2 == 1) {
                System.out.println("\t平局");
            } else if (temp2 == 2) {
                System.out.println("\t你赢了");
                jf++;
            } else {
                System.out.println("\t你输了");
                jf--;
            }
            break;
        case 2:
            if (temp2 == 1) {
                System.out.println("\t你输了");
                jf--;
            } else if (temp2 == 2) {
                System.out.println("\t平局");
            } else {
                System.out.println("\t你赢了");
                jf++;
            }
            break;
        case 3:
            if (temp2 == 1) {
                System.out.println("\t你赢了");
                jf++;
            } else if (temp2 == 2) {
                System.out.println("\t你输了");
                jf--;
            } else {
                System.out.println("\t平局");
            }
            break;
        }
        System.out.println();
    }
    System.out.println("\t你的总积分为:" + jf);
}

public String change(int choose) {
    String str = "";
    switch (choose) {
    case 1:
        str = "石头";
        break;
    case 2:
        str = "剪刀";
        break;
    case 3:
        str = "布";
        break;

    }

    return str;
}

}
图片说明

要学会分析异常信息:调用input.nextInt导致的,可以设置断点调试

input.close();应该放在确定自己是赢还是输的地方,而不是在对手选择了之后就关闭,那样一旦结果是平局,下次输入时就没有input了

一般来说是不手动的去关闭输入的input.close()
因为控制台程序主要就是用scanner去输入,在程序没有结束的时候不应该手动触发
当程序结束的时候直接调用System.exit(0)来退出程序