我试图完成AP CS FRQ问题。我编写了代码,但它没有用。我搞砸了哪里?
编写一个静态方法rowSums,用于计算给定二维中每行的总和 array并在一维数组中返回这些和。该方法有一个参数,一个二维 数组arr2D的int值。该数组按行主要顺序排列:arr2D [r] [c]是条目 在第r行和第c列。该方法返回一维数组,每行包含一个条目 arr2D使得每个条目是arr2D中相应行的总和。作为提醒,每排一个 二维数组是一维数组。
` public static int[] rowSums(int[][] arr2D){
int total2 = 0;
int a[] = new int[arr2D.length];
for(int x=0; x<arr2D.length; x++){
for(int n=0; n<arr2D[x].length;n++){
arr2D[x][n] = total2;
a[x] = a[x] + total2;
}
}
return a;
}`
答案 0 :(得分:0)
您的作业是向后的,您应该使用以下方法存储2D数组的每个元素:
total2 = arr2D[x][n];
不是这个:
arr2D[x][n] = total2;
完整代码:
for (int x=0; x < arr2D.length; x++) {
for (int n=0; n < arr2D[x].length; n++) {
total2 = arr2D[x][n];
a[x] = a[x] + total2;
}
}
答案 1 :(得分:0)
您需要在外循环中重置total2
,并在内循环结束后设置值
int a[] = new int[arr2D.length];
for(int x=0; x<arr2D.length; x++){
int total2 = 0;
for(int n=0; n<arr2D[x].length;n++){
total2 += arr2D [x][n];
}
a[x] = total2;
}
如果total2
不会被重复使用,可以缩短为
for (int x=0; x < arr2D.length; x++) {
for (int n=0; n<arr2D[x].length; n++) {
a[x] = a[x] + arr2D[x][n];
}
}
答案 2 :(得分:0)
编写好的代码包括好的评论和好的变量名称选择。让我们首先开始逐行评论您的代码,这样您就可以更好地了解正在发生的事情:
public static int[] rowSums(int[][] arr2D){
// A variable which is always 0
int total2 = 0;
// The actual output:
int a[] = new int[arr2D.length];
// For each row..
for(int x=0; x<arr2D.length; x++){
// For each column..
for(int n=0; n<arr2D[x].length;n++){
// Put 0 into the 2D array (this line is backwards):
arr2D[x][n] = total2;
// Add the 'total' (always 0) into the current output
a[x] = a[x] + total2;
}
}
// Return the output
return a;
}
好的,所以希望你的一条线路向后更清晰(你有一些糟糕的变量命名选择)。更好的东西看起来更像是这样:
public static int[] rowSums(int[][] arr2D){
// The actual output:
int totals[] = new int[arr2D.length];
// For each row..
for(int row=0; row<arr2D.length; row++){
// For each column..
for(int col=0; col<arr2D[row].length;col++){
// Get the column value:
int columnValue = arr2D[row][col];
// Add the column amount into the total:
totals[row] = totals[row] + columnValue;
}
}
// Return the output
return totals;
}
由于变量现在更加清晰,我们可以删除多余的注释:
public static int[] rowSums(int[][] arr2D){
int totals[] = new int[arr2D.length];
for(int row=0; row<arr2D.length; row++){
for(int col=0; col<arr2D[row].length;col++){
int columnValue = arr2D[row][col];
totals[row] = totals[row] + columnValue;
}
}
return totals;
}
答案 3 :(得分:-1)
arr2D [x] [n] = total2; //你将0分配给arr2D [x] [n]
将其更改为total2 = arr2D [x] [n];
它会起作用!!