当前位置: 首页 > 知识库问答 >
问题:

重复扫描仪输入的问题?

贡英华
2023-03-14

我正在制作一个地下城探索类型的游戏,用户可以输入输入作为一个移动每回合(选择一个方向移动)。然而,我遇到了一个问题与采取扫描仪输入。当我测试我的方法一次,它是正确的,然而,当我把它进入一个while循环,以便我可以从玩家的每一个回合,我得到一个新的移动,在第一次输入后,我得到了一个错误。我不明白为什么我会得到这个错误,因为它不应该每次运行时都扫描新的输入吗?谢谢你的洞察力。

错误如下:

Enter your move: Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at ActTwoGame.Update(ActTwoGame.java:63)
    at ActTwoGame.main(ActTwoGame.java:42)

下面是有问题的代码

import java.util.Scanner;

public class DungeonGame {
    // Data to display the base geometry in the room
    // When drawing on the screen the orientation will be flipped
    // This is fine, since we'll fix it later
    private static final int roomData[][] = {   
{1,1,1,1,1,1,1,1,1,1},  {1,0,0,0,0,0,0,0,0,1},                                  {1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}};

        private static int xPos = 1;
        private static int yPos = 15;

    // Tiles
    private static final String WALL_GRAPHIC = "##";
    private static final String BLANK_GRAPHIC = "..";   
    private static final String PLAYER_GRAPHIC = "!!";  

    public static String map = new String();

    public static void main(String[] args) 
    {
        Start();        

        while (true)
        {
            Draw();
            Update();
        }

    }


    public static void Start()
    {
    // Init logic
        System.out.println("Hello! Welcome to Act Two: The Game.");
        System.out.println("To control your player, use the WASD keys. You will be prompted for input, but you can");
        System.out.println("only move one space per turn. Enter W for up, S for left, A for down, D for right.\n");
    }

    public static void Update() {
            // Gameplay logic
        String charMoves = "";
        Scanner scanLine = new Scanner(System.in);
        System.out.print("Enter your move: ");
        charMoves = scanLine.next();


        if (charMoves.equals("w") || charMoves.equals("W")) {
            if (roomData[xPos-1][0] != 1) 
                xPos -= 1;
            else
                System.out.println("Ouch! That was a wall.");


        }
        else if (charMoves.equals("a") || charMoves.equals("A")) {
            if (roomData[yPos-1][0] != 1) 
                yPos -= 1;
            else
                System.out.println("Ouch! That was a wall.");

        }
        else if (charMoves.equals("s") || charMoves.equals("S")) {
            if(roomData[xPos+1][0] != 1)
                xPos += 1;
            else
                System.out.println("Ouch! That was a wall.");


        }
        else if (charMoves.equals("d") || charMoves.equals("D")) {
            if (roomData[yPos+1][0] != 1)
                yPos += 1;
            else
                System.out.println("Ouch! That was a wall.");


        }
        else
            System.out.println("Invalid move. No action was taken.");
        scanLine.close();
    }

    public static void Draw() {
            // Map drawing

        for (int i = 0; i < roomData.length; i++) {
            for (int j = 0; j < roomData[0].length; j++) {
                if (roomData[i][j] == 1)
                    map += (WALL_GRAPHIC);
                else if (i == yPos && j == xPos)
                    map += (PLAYER_GRAPHIC);
                else
                    map += (BLANK_GRAPHIC);
                }
            map += "\n";
            } 
        System.out.println(map);
    }

}

共有1个答案

景宏朗
2023-03-14

不应在Update方法内关闭scanLine对象

scanLine.close();
 类似资料:
  • 我对编程相当陌生。目前我正在做一个uni项目,用java创建一个基本的文本游戏。我遇到的问题是,如何实现一个不允许用户输入相同名称的业务规则。我把它设置好了,这样扫描仪就可以读取阵列了。我使用的是Java,这是我第一次使用这个论坛,所以我非常感谢大家提供的帮助,并提前感谢大家!:) 并为糟糕的格式道歉,我不知道如何正确发布。

  • 这是我在Jcreator上编写的代码 代码如下:- 什么是错误的,我如何纠正它?请帮助。

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 所以我试着做一个简单的java预订系统,但问题是扫描仪功能不起作用,所以程序不需要任何输入。我试着把扫描仪,但它显示了一个警告,当我试图运行程序时,局部变量没有被使用,因此扫描仪不工作,所以整个程序卡在输入部分,不做任何其他事情。我对java很陌生,正试图通过创建项目来学习,所以我将感谢任何帮助和建议,谢谢。这是代码:所以显示警告局部变量不被使用的部分或一行代码是行8,9,16,34,36,46,

  • 我正在使用Java的扫描仪读取用户输入。如果我只使用nextLine一次,它可以正常工作。对于两个nextLine,第一个不等待用户输入字符串(第二个)。 输出: X:Y:(等待输入) 我的代码 你知道为什么会发生这种事吗?谢谢

  • 我想在我的代码中手动读取一些值。除了最后一个(lambda2)之外,它对所有值都有效。我可以无限地继续键入值,即使它们不是双精度的,也不会发生任何事情。如果我用任何其他值键入其他值,我会收到一条错误消息,以及第一次输入lambda2时的错误消息。我在另一个代码中以类似的方式(最终只创建了一个不同的对象)进行了操作,并且效果很好。