如何验证数组是否包含数据,如果是,则>无法覆盖它

时间:2017-07-20 21:05:25

标签: java arrays

我正在为用户和计算机之间的战舰游戏编写代码,首先我要求用户放置他们的船只和地点。手榴弹(每个需要1个点)&在同一地点不能有2艘船或2枚手榴弹。

如何编写验证阵列位置是否已被“占用”的代码,以及是否要求用户重试。

我试着写:但显然我做不到!null。所以,我不知道该写什么

public void gridverification(String[][] grid){

for(int i =0; i<grid.length; i++){
    for(int j = 0; j<grid.length; i++){

        if(grid[i][j] == !null){

        }
    }
}

如果它令人困惑,我很抱歉(显示的代码在我的战舰类中,其余的代码都在驱动程序中。

编辑:我已经纠正了这个问题,但无论用户输入什么内容,都会不断显示消息。

这是我的驱动程序代码:

for(int i = 0; i&lt; 6; i ++){

        System.out.print("Enter the coordinate of your ship #"+(i+1)+":");
        answer = keyboard.next();
        verify.gridverification(gridfinal);
        precolumn = answer.charAt(0);
        column = letter.convert(precolumn);
        prerow = Character.digit(answer.charAt(1), 10);
        row = number.convertnum(prerow);
        gridfinal[column][row] = " s ";

    }

以下是我所做的验证方法:

public void gridverification(String [] [] grid){

if (grid != null && grid.length > 0)
{
    for (int i = 0; i < grid.length; i++)
    {
        for (int j = 0; j < grid.length; j++)
        {

            if (grid[i][j] != null)
            {
                System.out.println("Sorry, coordinates already used. Try again.");
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

你的逻辑无序。将其写为if(grid[i][j] != null)。通过这种方式,您可以看到该位置的网格是否不等于为空。

答案 1 :(得分:0)

你应该检查给定的网格数组和[i] [j]处的实际元素。您还可以检查元素的大小,如public void gridverification(String[][] grid) { if (grid != null && grid.length > 0) { for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid.length; i++) { if (grid[i][j] != null) { // do something } } } } }

StringUtils.isEmpty

或者,如果您正在处理一个大型项目,您经常需要检查字符串变量为null及其大小,那么您应该使用StringUtils.isNotBlankcommons-lang-2-6.jar作为依赖项添加{{1}}你项目中的jar。

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html

答案 2 :(得分:0)

您似乎正在尝试检查用户是否已将船舶放置在他们输入的位置。您当前的代码不会这样做。它查看整个数组并检查每个位置是否为空。如果他们已经进入船舶,它会找到并说他们需要再试一次。您可以做什么检查他们输入的位置。所以你可以做类似以下的事情:

public String[][] populateWithShips(String[][] grid){
    int shipCount = 6;
    for (int shipIndex = 0; shipIndex < shipCount; shipIndex++) {
        boolean shipExists = false;
        while(shipExists != true){//Another way you could do this is (!shipExists)
            System.out.println("Please enter the column number for ship number " + shipIndex + :");
            int column = Integer.parseInt(this.keyboard.next());//This will take the input String and parse it to a Integer object
            System.out.println("Please enter the row number for ship number " + shipIndex + :");
            int row = Integer.parseInt(this.keyboard.next());
            //Note I haven't verified that this inputs are correct, just assuming they user enter good inputs

            if(grid[column][row] != null){
                System.out.println("Sorry, coordinates already used. Try again.\n");
            }
            else{
                grid[column][row] = " s ";
                shipExists = true;
            }
        }   
    }
    return grid;
}

请注意grid[row][column]更准确,但只要您保持一致而不是无关紧要。

此外,这似乎可能是家庭作业的一部分,所以我建议你阅读Open letter to students with homework problems。我还建议您使用调试器并写出您要实现的步骤。这将有助于您更清楚地了解自己在做什么,并更容易发现错误。