【问题标题】:How to convert a method from boolean to int (java)?如何将方法从 boolean 转换为 int (java)?
【发布时间】:2014-11-09 20:54:44
【问题描述】:

所以我必须用 Java 构建一个数独游戏。我可以在我的方法中确认数字 1 到 9 在每行/列中只出现一次。但是,我已将此设置为布尔值,并且我一生都无法弄清楚如何将其转换为整数(以便我可以返回发生错误的行/列)。

public static boolean rowColumnCheck(int[][] array) {

    for (int i = 0; i < 9; i++) {
        boolean[] rowArray = new boolean[9];
        boolean[] columnArray = new boolean[9];
        for (int j = 0; j < 9; j++) {
            int currentNumberRow = array[i][j];
            int currentNumberColumn = array[j][i];
            if ((currentNumberRow < 1 || currentNumberRow > 9)
                    && (currentNumberColumn < 1 || currentNumberColumn > 9)) {
                return false;
            }
            rowArray[currentNumberRow - 1] = true;
            columnArray[currentNumberColumn - 1] = true;

        }
        for (boolean booleanValue : rowArray) {
            if (!booleanValue) {
                return false;
            }
        }
        for (boolean booleanValue : columnArray) {
            if (!booleanValue) {
                return false;
            }
        }
    }
    return true;
}

【问题讨论】:

  • 你想返回什么值?当有人调用该方法时,他们应该期待什么?将 boolean 转换为 int 似乎不合逻辑;我的意思是,您可以改为返回 -11,但此时,您不妨只使用布尔值。它应该返回什么,为什么?通常人们想将 String 更改为 int 以用于计算目的,但数字不能像字符串那样表示为布尔值(如上所述,只有 -1 和 1)
  • 我希望它返回一个整数的原因是因为我想要发生此错误的列/行。我想我可以将返回类型修改为整数。然后,运行 For 循环并返回 For 循环无法成功工作的整数,但我没有任何运气。
  • currentNumberRowcurrentNumberColumn 对我来说没有意义。您访问array 中的值的方式似乎很随机;我不确定为什么[i][j] 代表行的值,而[j][i] 代表列的值。此外,返回 int 只会让您返回 1 个值,因此您将无法返回错误发生在哪一行和哪一列;有一些解决方案。 for 循环控制您所在的行/列。 ji 正在指定行和列,所以我不确定你为什么需要 currentNumberRowcurrentNumberColumn
  • 如果您不确定我对什么感到困惑:另一个 currentNumberColumn 代表什么? array 中存储了什么?如果它是 sudoki 板的一部分,那么 [i][j][j][i] 正在访问看似随机的值

标签: java int boolean converter 2d-games


【解决方案1】:

我有一种感觉,您有时希望返回一对行/列,有时返回一行,有时返回一列。如果这是正确的,那么您需要创建一个额外的类:

public class RowCol {
    public final int row;
    public final int col;

    public RowCol(int row, int col) {
        this.row = row;
        this.col = col;
    }
}

现在当你想确定错误发生的地方时,你可以

return new RowCol(i,j);

或表示一行而不指定列

return new RowCol(i,-1);

对于一列也是如此

return new RowCol(-1,j);

你的方法的返回类型将是RowCol,当你从你的方法中得到一个返回时,你将能够询问它的rowcol字段来找出它的坐标返回值。

【讨论】:

    【解决方案2】:

    你不能。每个方法基本上只有一个返回类型,布尔值与整数不兼容。如果需要返回一组坐标,则可以将返回类型更改为 Integer 或 Pair,如果不存在则返回 null。

    我想应该是这样的。如果为 null 则没有错误,并且在该对上是错误位置。

    public static Pair rowColumnCheck(int[][] array) {
    
        Pair <Integer, Integer> p = null;
    
        for (int i = 0; i < 9; i++) {
            boolean[] rowArray = new boolean[9];
            boolean[] columnArray = new boolean[9];
            for (int j = 0; j < 9; j++) {
                int currentNumberRow = array[i][j];
                int currentNumberColumn = array[j][i];
                if ((currentNumberRow < 1 || currentNumberRow > 9)
                        && (currentNumberColumn < 1 || currentNumberColumn > 9)) {
                    p = new Pair<Integer, Integer>(i, j);
                    return p;
                }
                rowArray[currentNumberRow - 1] = true;
                columnArray[currentNumberColumn - 1] = true;
    
            }
            // Not really sure why you are doing this?
            for (boolean booleanValue : rowArray) {
                if (!booleanValue) {
                    return null;
                }
            }
            for (boolean booleanValue : columnArray) {
                if (!booleanValue) {
                    return null;
                }
            }
        }
        return null;
    }
    

    【讨论】:

    • "你可以做的是将返回类型更改为 Integer" - 这就是他寻求帮助的原因
    • 这就是我要问的。我怎样才能改变这个方法来做你建议的事情?我尝试将返回类型更改为 Integer,但无法成功修改正文以使其正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2017-12-31
    • 2023-01-18
    • 2021-05-31
    相关资源
    最近更新 更多