首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java --为什么这段代码会重复?NoSuchElementException?

Java --为什么这段代码会重复?NoSuchElementException?
EN

Stack Overflow用户
提问于 2018-06-13 01:35:17
回答 1查看 78关注 0票数 0

我通过尝试在Eclipse中制作一个简单的石纸剪刀游戏来学习Java:

代码语言:javascript
复制
package com;


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


public class Game {

    public static void main(String[] args) {
        Game game = new Game();
        game.playerChoice();
        game.aiChoice();
        game.playGame();
    }

public void playGame() {

    if (playerChoice() == "Rock") {
        if (aiChoice() == "Rock") {
                System.out.println("Tie!");
            } else if (aiChoice() == "Paper") {
                System.out.println("AI wins!");
                } else {
                System.out.println("You win!");
                }

        } else if (playerChoice() == "Paper") {
            if (aiChoice() == "Rock") {
                System.out.println("You win!");
            } else if (aiChoice() == "Paper") {
                System.out.println("Tie!");
            } else {
                System.out.println("AI wins!");
            }

        } else {
            if (aiChoice() == "Rock") {
                System.out.println("AI wins!");
            } else if (aiChoice() == "Paper") {
                System.out.println("You win!");
            } else {
                System.out.println("Tie!");
            }
        }
    }

    public String playerChoice() {

        Scanner scanner = new Scanner(System.in);
        String word = null;

        try {
            System.out.println("Type Rock, Paper, or Scissors");
            word = scanner.next();
            System.out.println(word + " is saved as your choice");
        } finally {
            scanner.close();
        }
        return word;
    }

    public String aiChoice() {

        String[] wordlist = {"Rock", "Paper", "Scissors"};
        String word = wordlist [new Random().nextInt(wordlist.length)];
        System.out.println("AI has randomly picked " + word);
        return word;
    }
}

当我在扫描器输入中输入"Rock“、”纸质“或”剪刀“时,我在控制台中得到以下信息:

代码语言:javascript
复制
Type Rock, Paper, or Scissors
Rock <--- This is what I input into the console
Rock is saved as your choice
AI has randomly picked Scissors
Type Rock, Paper, or Scissors <--- This unintentionally repeats
Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Unknown Source)
    at java.base/java.util.Scanner.next(Unknown Source)
    at com.Game.playerChoice(Game.java:53)
    at com.Game.playGame(Game.java:17)
    at com.Game.main(Game.java:12)

我做错了什么导致这个异常,为什么System.out.println(“类型岩石,纸,或剪刀”),重复自己?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-13 01:41:13

首先,不要关闭扫描仪。这导致了NoSuchElement异常

您可以将扫描器移动到字段变量,而不是为每个玩家的选择创建一个新变量。

代码语言:javascript
复制
public class Game {

    private Scanner sc = new Scanner(System.in);

    public static void main(... 

要解决剩下的问题,在比赛开始前获得选择是没有意义的

就玩游戏吧

代码语言:javascript
复制
 public static void main(String[] args) {
    Game game = new Game();
    game.playGame();
}

然后,您需要坚持每个玩家的选择,而不是为每个方法调用再次选择(导致您的输入重复,AI为每个比较选择新的选择)。

代码语言:javascript
复制
public void playGame() {
    final String p = playerChoice();
    final String a = aiChoice();

     if (p.equals(a)) {
         if (a.equals("Rock")) {

请阅读How do I compare strings in Java?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50827982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档