【发布时间】:2017-10-13 07:14:22
【问题描述】:
我是编程初学者,我在编写对角线差时想出了这种方法,
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int j = 0;
int a[][] = new int[n][n];
int count1 = 0; int count2 = 0;
int result = 0;
for(int a_i=0; a_i < n; a_i++){
for(int a_j = 0;a_j < n;a_j++){
a[a_i][j] = in.nextInt();
}}
for(int i = 0;i<n;i++)
{
count1+=a[i][j];
System.out.println(count1);
j++;
}
j = 0;
for(int i = n-1;i>=0;i--)
{
count2+=a[i][j];
System.out.println(count2);
j++;
}
result = Math.abs(count1 - count2);
System.out.println(result);
}
输入
3
11 2 4
4 5 6
10 8 -12
预期输出 15
我的输出 16
【问题讨论】:
-
在您的第一个循环中,您使用的是 j 而不是 a_j。不确定这是否是故意的,但这是我注意到的。
-
请注意,重用变量(就像您使用
j一样)通常是一个坏主意,如此处所示。在尽可能严格的范围中声明变量;声明一个变量没有内在成本。您可以在 for 循环中声明(和更新)多个变量(前提是它们属于同一类型),因此for (int i = 0, j = 0; i<n; i++, j++)更适合您的第二个循环(或仅使用i代替j,因为它们是相等),for(int i = n-1, j=0;i>=0;i--, j++)用于第三个循环。 (请记住从正文中删除j++)。 -
@Flaom 感谢您的指出。
-
@AndyTurner 我肯定会记住这一点。非常感谢!