You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hyperskill Java入门课程printCorners方法测试报错求助

二维数组角落元素打印问题排查

我在Hyperskill平台学习《Java入门》课程时,实现printCorners方法遇到测试错误:第8个测试用例中的第6个测试失败,答案错误。请帮忙检查代码并解决问题。

任务要求

实现printCorners方法,按从左到右、从上到下的顺序打印二维数组twoDimArray的所有角落元素,元素间用空格分隔。示例如下:

输入数组:

1 0 2
0 0 0
3 0 4

打印结果:

1 2
3 4

注意必须始终打印4个角落,例如输入单列数组:

输入数组:

1
2
3

打印结果:

1 1
3 3

我的代码

public class ArrayOperations {
    public static void printCorners(int[][] twoDimArray) {
        int n = 2;
        int[][] myTable = new int[n][n];
        int cols = twoDimArray[0].length;
        if (cols == 1) {
            for (int i = 0; i < twoDimArray.length; i++) {
                if (i == 0) {
                    myTable[0][0] = twoDimArray[i][0];
                    myTable[0][1] = twoDimArray[i][0];
                    myTable[1][0] = twoDimArray[i][0];
                    myTable[1][1] = twoDimArray[i][0];
                }
                else if (i < twoDimArray.length - 1) {
                    myTable[1][0] = twoDimArray[i][0];
                    myTable[1][1] = twoDimArray[i][0];
                }
            }
            System.out.println(myTable[0][0] + " " + myTable[0][0]);
            System.out.println(myTable[1][0] + " " + myTable[1][1]);
        }
        else if (cols > 1) {
            for (int i = 0; i < twoDimArray.length; i++) {
                for (int j = 0; j < twoDimArray[i].length; j++) {
                    if (i == 0 && j == 0) {
                        myTable[0][0] = twoDimArray[i][j];
                    }
                    else if (i == 0 && j == twoDimArray[i].length - 1) {
                        myTable[0][1] = twoDimArray[i][j];
                    }
                    else if (i == twoDimArray.length - 1 && j == 0) {
                        myTable[1][0] = twoDimArray[i][j];
                    }
                    else if (i == twoDimArray.length - 1 && j == twoDimArray[i].length - 1) {
                        myTable[1][1] = twoDimArray[i][j];
                    }
                }
            }
            for (int i = 0; i < myTable.length; i++) {
                for (int j = 0; j < myTable[i].length; j++) {
                    System.out.print(myTable[i][j] + " ");
                }
                System.out.println();
            }
        }
    }
}

问题分析与修复

你的代码存在几个关键问题:

  • 单列数组处理逻辑错误:在cols == 1分支中,循环里的else if (i < twoDimArray.length - 1)会把最后一行的元素错误覆盖成中间行的值,比如输入单列数组[1,2,3]时,循环到i=1(中间行)会把myTable[1][0]和myTable[1][1]改成2,而正确值应该是最后一行的3。
  • 输出多余空格:在cols > 1分支中,打印时每个元素后都加空格,导致每行末尾会多一个空格,可能不符合测试用例的格式要求。
  • 逻辑冗余:没必要用myTable存储四个角落元素,直接定位到目标位置打印即可,代码可大幅简化。

修复后的代码:

public class ArrayOperations {
    public static void printCorners(int[][] twoDimArray) {
        int rows = twoDimArray.length;
        int cols = twoDimArray[0].length;
        
        // 打印第一行的两个角落
        System.out.println(twoDimArray[0][0] + " " + twoDimArray[0][cols - 1]);
        // 打印最后一行的两个角落
        System.out.println(twoDimArray[rows - 1][0] + " " + twoDimArray[rows - 1][cols - 1]);
    }
}

修复说明

  • 直接获取数组的行数rows和列数cols,无需额外数组存储。
  • 当数组只有一列时,twoDimArray[0][0]和twoDimArray[0][cols-1]是同一个值,自然满足重复打印的要求。
  • 输出格式严格符合要求,每行两个元素用空格分隔,无多余空格。

内容的提问来源于stack exchange,提问作者Krystian Kowalczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:37:47