【问题标题】:Checking if a 2D Array includes this field or if it is undefined检查二维数组是否包含此字段或未定义
【发布时间】:2015-03-13 15:50:43
【问题描述】:

目前正在为我在大学的最后一项任务制作一个小游戏。 我目前的问题是游戏板是2D Array of Cells(自制级)。该板是使用我读入的 txt.file 创建的。现在用户可以输入多个命令。一个命令是创建一个新的游戏对象并使用特定的 x 和 y 参数将其放置在板上。 除了这个之外,还有什么方法可以检查该字段是否足以容纳他们输入的参数:

try {
        gameField.getField()[Integer
        parseInt(splittedCom[1])][Integer
        parseInt(splittedCom[2])].getStatus();
    } catch (ArrayIndexOutOfBoundsException e) { 
        Terminal.printLine("Error, this cell isn't in the gameField");
    }

我目前正在使用它来检查它是否有另一个命令。有没有办法在没有异常的情况下使用它?

【问题讨论】:

    标签: java arrays matrix


    【解决方案1】:

    由于您的数组已经构建,您应该已经有了数组的尺寸,因此您可以使用gameBoard.length 作为宽度,使用gameBoard[0].length 作为高度,并使用它们与用户的任何内容进行比较已提供。

    编辑:根据您的问题:

    如果您可以访问 gameBoard 对象,则无需保存它们,因为该信息可通过 gameBoard 对象本身获得。或者,您必须以某种方式坚持它们。请注意,虽然您浪费了一些额外的内存来存储值,但抛出异常也有其成本,应该避免(在这种情况下)。您期望用户提供不正确值的情况不属于例外情况的标准,因为这是您所期望的。

    【讨论】:

    • 我还考虑过保存两个长度以便我可以使用它们,但是使用您的方法在创建字段时保存长度会是“浪费”吗?我希望我的代码尽可能清晰和优化。您认为通过gameBoard.lengthgameBoard[0].length 保存或访问它们更好吗?
    • @NhatNienne:我已经更新了我的答案。您确实提出了一个有效的观点,但您需要牢记抛出异常的成本。
    • 感谢您向我解释。帮了我很多忙!
    • @NhatNienne:不客气。我已经修改了我的答案,如果你再看一遍可能会更好,以防万一。
    • 通常情况下,Integer.parseInt() NumberFormatException 这样的东西总是可以用regex 来检查以避免使用异常,对吗?
    【解决方案2】:

    检查输入,只要它适合您的游戏区域。

    boolean checker = false;
        while(!checker){
         if( /* check if the input is inside the gamefield */){
            checker = true;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多