这个问题很难用简洁的措辞表达。我将如何修改我的代码以满足我在此问题中遇到的限制?
public static void main(String[] args) {
final int [][] test = { {1, 6, 11, 16, 21},
{2, 7, 12, 17, 22},
{3, 8, 13, 18, 23},
{4, 9, 14, 19, 24},
{5, 10, 15, 20, 25} };
System.out.println(TwoDOneD.XShape(test));
public static String XShape(int [][] test) {
String res = "";
for (int c = 0; c < test[0].length; c++) {
for (int r = 0; r < test.length; r++) {
if (c == r) {
res += test[r][c] + " ";
} else if (c + r == 4) {
res += test[r][c] + " ";
}
}
}
return res;
}
此代码的要点是将构成X模式的整数放入字符串中并打印该字符串。这是我每次运行时都会得到的输出:
1 5 7 9 13 17 19 21 25
但是我希望输出看起来像这样(首先使用第一个if语句,将所有这些值添加到字符串中,然后移到另一个else if语句并将所有这些值添加到字符串中):>
1 7 13 19 25 21 17 13 9 5
答案 0 :(得分:2)
如果使用2个结果,则不需要多余的循环,然后在最后加入它们:
String res1, res2 = "";
for (int c = 0; c < test[0].length; c++) {
for (int r = 0; r < test.length; r++) {
if (c == r) {
res1 += test[r][c] + " ";
} else if (c + r == 4) {
res2 += test[r][c] + " ";
}
}
}
return res1 + res2;
答案 1 :(得分:1)
您需要两个循环。
其中一个c = r
和另一个c = 4 - r
您不需要使用嵌套循环,每个循环只需一个。您也不需要if
语句。
答案 2 :(得分:1)
您有两个嵌套的for循环。它们将按列主要顺序运行和迭代。如果要以不同的顺序进行迭代,则需要使用不同的循环。 if语句没有任何问题。
for (int c = 0; c < test.length; c++) {
// Do it for (c, c)
}
for (int c = 0; c < test.length; c++) {
// Do it for (c, test.length - c - 1)
}
此外,作为切线笔记,您在一个地方使用4
作为幻数,在其他地方使用test.length
。如果您始终希望数组为5x5,则使用5
而不是test.length
并在开始处放一个断言。否则(更有可能),使用test.length - 1
代替幻数4
。