gpt4 book ai didi

用于 zigzag 的 java 数组有效,但测试人员一直告诉我有错误?

转载 作者:行者123 更新时间:2023-12-02 09:36:45 25 4
gpt4 key购买 nike

我有这行代码来创建一个锯齿形数组,它相当简单,而且我已经有了它的代码。这是问题的摘要:

该方法创建并返回一个新的二维整型数组,在 Java 中它实际上只是一个一维数组,其元素是 int[] 类型的一维数组。返回的数组必须具有正确的行数,并且每行都具有精确的 cols 列。该数组的行中必须按顺序包含数字 start、start + 1、...、start + (rows * cols - 1),但每个奇数行中的元素必须按降序列出。

例如,当使用 rows = 4、cols = 5 和 start = 4 调用时,此方法应创建并返回其内容为的二维数组

4   5   6   7   8
13 12 11 10 9
14 15 16 17 18
23 22 21 20 19

我尝试与同事交谈,但他们也无法发现问题


public class P2J1
{
public static int[][] createZigZag(final int rows, final int cols, int start)
{
final int[][] array = new int[rows][cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
array[i][j] = start;
start++;
}
}
return array;
}
}
/// heres the tester program

@Test public void testCreateZigZag() {
Random rng = new Random(SEED);
CRC32 check = new CRC32();
for(int i = 0; i < TRIALS; i++) {
int rows = rng.nextInt(20) + 1;
int cols = rng.nextInt(20) + 1;
int start = rng.nextInt(100);
int[][] zig = P2J1.createZigZag(rows, cols, start);
assertEquals(rows, zig.length);
for(int j = 0; j < rows; j++) {
assertEquals(cols, zig[j].length);
for(int e: zig[j]) { check.update(e); }
}
}
assertEquals(3465650385L, check.getValue());
}

最佳答案

您的列索引始终按此顺序从 0 到 cols-1。您需要每隔一行更换一次顺序。

您可以通过使用内部循环的开始、结束和增量变量来完成此操作,并根据行索引是奇数还是偶数分配这些变量。

类似这样的东西(未经测试):

public static int[][] createZigZag(final int rows, final int cols, int start) {
final int[][] array = new int[rows][cols];
for (int i = 0; i < rows; i++) {
boolean backwards = ((i & 1) == 1);
final int jStart = backwards ? cols-1 : -1;
final int jEnd = backwards ? 0 : cols;
final int jStep = backwards ? -1 : 1;

for (int j = jStart; j != jEnd; j += jStep) {
array[i][j] = start;
start++;
}
}
return array;
}

您也可以只编写两个不同的内部循环,在相同的条件下选择。一个将从 0 开始填充,另一个将从 cols-1 开始向后填充。

public static int[][] createZigZag(final int rows, final int cols, int start) {
final int[][] array = new int[rows][cols];
for (int i = 0; i < rows; i++) {
if ((i & 1) == 1) {
for (int j = cols-1; j >= 0; j--) {
array[i][j] = start;
start++;
}
} else {
for (int j = 0; j < cols; j++) {
array[i][j] = start;
start++;
}
}
}
return array;
}

关于用于 zigzag 的 java 数组有效,但测试人员一直告诉我有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com