我试图从阵列中获得某种输出模式,但似乎无法得到我正在寻找的东西,现在确定原因。链接是所需的输出。抱歉,如果格式不好。数组大小由用户输入。
public class A3_Q2 {
int [][] pattern2 = new int[arraySize][arraySize];
number = 1;
int i;
int j;
int newNumber = arraySize-1;
for (i = 0; i < arraySize; i++)
{
if (i == 0)
{
for (j = 0; j < arraySize; j++)
{
pattern2[i][j] = number;
System.out.printf("%3d", pattern2[i][j]);
number++;
}
}
else
{
for(j = 0; j < i; j++)
{
pattern2[i][j] = number + newNumber;
System.out.printf("%3d", pattern2[i][j]);
newNumber++;
}
newNumber = arraySize-1;
while(j < arraySize)
{
pattern2[i][j] = number;
System.out.printf("%3d", pattern2[i][j]);
number++;
j++;
}
}
System.out.println("");
}
期望的输出:
1 2 3 4 5
10 6 7 8 9
14 15 11 12 13
18 19 20 16 17
22 23 24 25 21
此图像显示突出显示的无序细胞:
答案 0 :(得分:0)
无需单独处理特定行。值应使用可以使用模运算符普遍应用的公式计算。
这应该可以解决问题:
for (i = 0; i < arraySize; i++) {
for (j = 0; j < arraySize; j++) {
int value = i * arraySize + (j - i + arraySize + 1) % arraySize;
if (value % arraySize == 0) {
value += arraySize;
}
pattern2[i][j] = value;
System.out.printf("%3d", pattern2[i][j]);
}
System.out.println("");
}
答案 1 :(得分:0)
正如我在评论中建议的那样,你一次尝试做太多事情,这使逻辑(和逻辑错误)很难看到。 将每个部分分解为自己的方法可以使事情更多更容易。
所有这些循环和条件隐藏了只需要三个任务:
public static void main(final String[] args) {
final int arraySize = 5;
int[][] pattern = new int[arraySize][arraySize];
fillPattern(pattern);
printPattern(pattern);
return;
}
奇怪的非顺序输出意味着&#34;填充网格&#34;对于一种方法来说,实际上是一项太大的任务。
填充网格通常需要填充每一行。 此网格还需要将每行的值向右旋转一次...... 比前一行多一个。 这与使用行填充网格无关,因此它是一些其他方法的问题。
(我可以将rowStartValue
强加到其他方法上,然后再考虑它。)
private static void fillPattern(int[][] pattern) {
final int rowCount = pattern.length;
for (int rowOffset = 0; rowOffset < rowCount; rowOffset++) {
final int[] row = pattern[rowOffset];
// Numbers in grid start at 1, not 0.
final int rowStartValue = rowOffset * row.length + 1;
fillRow(row, rowOffset, rowStartValue);
}
return;
}
fillRow
必须生成值并将其填入row
。
制作价值观很容易;
唯一棘手的部分是决定把它们放在哪里。
挑选目的地只需要两个操作员,所以我在这里做了。
由于没有人想知道row[some / weird * math % here]
的含义,我通过将其保存为rowIndex
变量来为计算命名。
如果它更复杂,我会将工作转移到rowIndex(...)
方法。
private static void fillRow(int[] row, final int offset, final int value) {
for (int addend = 0; addend < row.length; addend++) {
final int rowIndex = (offset + addend) % row.length;
row[rowIndex] = value + addend;
}
return;
}
现在网格已满,打印很简单:
private static void printPattern(final int[][] pattern) {
for (final int[] row : pattern) {
for (final int element : row) {
System.out.printf("%3d", element);
}
System.out.println();
}
return;
}
将i
和j
等变量替换为row
和offset
也有很大帮助。