我在本学期的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感到困惑。任何帮助将不胜感激!
答案 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;
}