Java 无法从循环中获取所需的输出
我试图从数组中获取特定的输出模式,但似乎无法获取我要查找的内容,现在确定原因。链接是所需的输出。如果格式不好,很抱歉。数组大小由用户输入Java 无法从循环中获取所需的输出,java,Java,我试图从数组中获取特定的输出模式,但似乎无法获取我要查找的内容,现在确定原因。链接是所需的输出。如果格式不好,很抱歉。数组大小由用户输入 public class A3_Q2 { int [][] pattern2 = new int[arraySize][arraySize]; number = 1; int i; int j; int newNumber = arraySize-1; for (i = 0; i < arraySi
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("");
}
此图显示了高亮显示的无序单元格:
无需单独处理特定行。应使用可普遍使用的模运算符的公式计算值 这应该可以做到:
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("");
}
for(i=0;i
正如我在评论中所建议的,您试图一次做太多的事情,这使得逻辑(和逻辑错误)很难看到。
将每个部分分解成自己的方法可以使事情变得更容易
所有这些循环和条件隐藏了只需要三个任务:
rowStartValue
也硬塞到另一个方法上。)
现在网格已满,打印变得很容易:
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;
}
用
row
和offset
替换i
和j
等变量也有很大帮助。此代码无法编译。什么是number
类型,或者你的方法在哪里?你的实际输出是什么?看起来你有两个作业,所以写两个方法:第一个用值填充数组,第二个打印数组。让你偏离正轨的是在同一块代码中混合计算、数组初始化和输出。(如果出于某种原因,您必须将所有内容保存在同一方法中,至少要按顺序执行作业:初始化所有内容,然后打印所有内容。)
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;
}
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;
}