Ragged(锯齿状)阵列中的一行产品

时间:2016-01-30 17:11:20

标签: java multidimensional-array methods product jagged-arrays

我在本学期的CS课程中遇到了一个挑战问题,这是上学期的复习问题,但问题是:"给定一个参差不齐的数组,查找数组中的任何行是否有48的产品如果是,则返回该行号。如果没有行包含48的乘积,则返回-1。"这是我到目前为止所做的。

public class RaggedProducts {

public static void main(String[] args) {
    int[][] a = {{3, 9},
                {100},
                {1, 4, 6, 2},
                {23, 3, 8}};
    System.out.println(product(a));
}

/*
 * finds if parameter array has a row which the numbers within that row
 * have a product of 48, returns row integer value. If no rows have a
 * product of 48, returns -1.
 */
public static int product(int[][] ragged) {
    int product = 1;

    for (int i = 0; i < ragged.length; i++) {
        // EDIT: I got my answer, I had to add "product = 1" here
        for (int j = 0; j < ragged[i].length; j++) {
            product *= ragged[i][j];
            if (i > 0) { // what to do here to reset product value whenever "i" changes
                         // "i > 0" is just a placeholder, I know it doesn't make sense
                product = 1;
            }
            if (product == 48) {
                return i; // I want to return the value 2
            }
        }
    }
    return -1;
}

}

如果我将锯齿状数组中的第一行设置为48的产品,该程序可以正常工作,但我对如何在行更改后将产品字段重置为1感到困惑。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您似乎对如何迭代2D数组的工作感到困惑。你的两个循环基本上是这样做的:

for each row i do {
    //you can do something here too!
    for each cell j in row i do {
        ...
    }
    //...and here!
}

因此,如果您希望在开始迭代下一行时将产品重置为,请在代码中的第二个for循环之前执行此操作。

此外,如果产品等于或大于 48,现在您的程序会返回一行。据我所知,这不是您想要的。因此,在迭代一行中的单元格之后(在第二个for循环之后但在第一个for循环内)之后,你应该检查之后的相等性。

顺便说一句,java支持的语法更类似于我的伪代码。你可以写

for (int[] row : ragged) {
    for (int value : row) {
        //do something
    }
}

答案 1 :(得分:0)

 public static int product(int[][] ragged) {
    int product = 1;

    for (int i = 0; i < ragged.length; i++) {
      for (int j = 0; j < ragged[i].length; j++) {
        product *= ragged[i][j];


      }
      if (product == 48) {
        return i; // I want to return the value 2
      }else{
        product=1;
      }
    }
    return -1;
  }