Java 有没有可能把我的代码压缩成少于3行? 公共类MagicSquare { 公共静态int[]grid=newint[3][3]; 公共静态int i=0; 公共静态int j=0; 公共静态void main(字符串[]args){ int x=1; int y=2; int z=0; 而(z

Java 有没有可能把我的代码压缩成少于3行? 公共类MagicSquare { 公共静态int[]grid=newint[3][3]; 公共静态int i=0; 公共静态int j=0; 公共静态void main(字符串[]args){ int x=1; int y=2; int z=0; 而(z,java,magic-square,Java,Magic Square,输出如下所示: 2,4,9, 6,8,1, 7,3,5, 你好,, 我写了一个黑魔法代码,它能够填充正方形的网格和右边,但是如果它填充了一个数字,那么下一个数字将被放在它当前位置下方的正方形中 然后,向上向右移动一个正方形,然后将下一个整数放在那里,如果我也离开网格,那么下一个数字将环绕底部和/或左侧。该程序运行,直到所有的正方形都被填满 我想知道是否有可能将从while循环开始到for循环结束的代码压缩成更短的代码 有人说我只需要两行代码就可以完成,我觉得这很奇怪……但他们说这是可行的 任何提

输出如下所示:

2,4,9,
6,8,1,
7,3,5,

你好,, 我写了一个黑魔法代码,它能够填充正方形的网格和右边,但是如果它填充了一个数字,那么下一个数字将被放在它当前位置下方的正方形中

然后,向上向右移动一个正方形,然后将下一个整数放在那里,如果我也离开网格,那么下一个数字将环绕底部和/或左侧。该程序运行,直到所有的正方形都被填满

我想知道是否有可能将从while循环开始到for循环结束的代码压缩成更短的代码

有人说我只需要两行代码就可以完成,我觉得这很奇怪……但他们说这是可行的

任何提示、帮助或指示都将不胜感激


非常感谢!

不确定是否少于3行(至少在不牺牲可读性的情况下),但您可以肯定地压缩这些if语句

public class MagicSquare
{
    public static int[][] grid = new int[3][3];
    public static int i = 0;
    public static int j = 0;

    public static void main(String[] args) {

       int x = 1;
       int y = 2;
       int z = 0;

       while(z < 9)
       {
             int holdx = x;
             int holdy = y;
             z++;
             x++;
             y--;

       if(x == 3)
       {
             x = 0;
       }

       if(y == -1)
       {
             y = 2;
       }

       if(y == 3)
       {
             y = 0;
       }

       if(grid[x][y] == 0)
       {
            grid[x][y] = z;
       }

       else
       {
            holdy++;

            if(holdy == 3)
            {
                 holdy = 0;
            }

            grid[holdx][holdy] = z;
            x = holdx;
            y = holdy;
       }
       }       

       for(int i = 0; i < 3; i++)
       {
            System.out.print(grid[i][0]+", ");
       }

       System.out.println(" ");

       for(int i = 0; i < 3; i++)
       {
            System.out.print(grid[i][1]+", ");
       }

       System.out.println(" ");

       for(int i = 0; i < 3; i++)
       {
            System.out.print(grid[i][2]+", ");
       }
}
简单地说

if(x == 3) {
     x = 0;
}

if(y == -1) {
     y = 2;
}

if(y == 3) {
     y = 0;
}
你可以把它们放到前面的
x++
y--

类似地,
holdy
(如果您确实需要该值,我不知道)

然后,如果您只想打印数组,可以缩短for循环

x = (x + 1) % 3;
y = ((y - 1) + 3) % 3;

不确定少于3行(至少在不牺牲可读性的情况下),但可以肯定地压缩这些if语句

public class MagicSquare
{
    public static int[][] grid = new int[3][3];
    public static int i = 0;
    public static int j = 0;

    public static void main(String[] args) {

       int x = 1;
       int y = 2;
       int z = 0;

       while(z < 9)
       {
             int holdx = x;
             int holdy = y;
             z++;
             x++;
             y--;

       if(x == 3)
       {
             x = 0;
       }

       if(y == -1)
       {
             y = 2;
       }

       if(y == 3)
       {
             y = 0;
       }

       if(grid[x][y] == 0)
       {
            grid[x][y] = z;
       }

       else
       {
            holdy++;

            if(holdy == 3)
            {
                 holdy = 0;
            }

            grid[holdx][holdy] = z;
            x = holdx;
            y = holdy;
       }
       }       

       for(int i = 0; i < 3; i++)
       {
            System.out.print(grid[i][0]+", ");
       }

       System.out.println(" ");

       for(int i = 0; i < 3; i++)
       {
            System.out.print(grid[i][1]+", ");
       }

       System.out.println(" ");

       for(int i = 0; i < 3; i++)
       {
            System.out.print(grid[i][2]+", ");
       }
}
简单地说

if(x == 3) {
     x = 0;
}

if(y == -1) {
     y = 2;
}

if(y == 3) {
     y = 0;
}
你可以把它们放到前面的
x++
y--

类似地,
holdy
(如果您确实需要该值,我不知道)

然后,如果您只想打印数组,可以缩短for循环

x = (x + 1) % 3;
y = ((y - 1) + 3) % 3;

大约10年前,我编写了以下用于计算幻方条目的代码。从某种意义上说,这可以归结为一行代码,适用于任意奇数边长度:

for(int[] row : grid) {
    System.out.println(Arrays.toString(row));
}
M类
{
公共静态void main(字符串参数[])
{
int n=5;
int a[][]=新int[n][n];
f(n,1,n/2,n-1,a);
印刷品(a);
}
静态intf(intj,inti,intk,intl,inti[]))
{
返回i>j*j?i-1:(i[k][l]=f(j,i+1,(k+(i%j==0?0:1))%j,(l+(i%j==0?-1:1))%j,i))-1;
}
公共静态无效打印(int a[]]
{

对于(int i=0;i和)更适合,但可能会显示当您(ab)时可以在一行代码中按多少适当地使用三元运算符和递归…

大约10年前,我编写了以下代码来计算幻方的条目。从某种意义上说,这可以归结为一行代码,适用于任意奇数边长度:

for(int[] row : grid) {
    System.out.println(Arrays.toString(row));
}
M类
{
公共静态void main(字符串参数[])
{
int n=5;
int a[][]=新int[n][n];
f(n,1,n/2,n-1,a);
印刷品(a);
}
静态intf(intj,inti,intk,intl,inti[]))
{
返回i>j*j?i-1:(i[k][l]=f(j,i+1,(k+(i%j==0?0:1))%j,(l+(i%j==0?-1:1))%j,i))-1;
}
公共静态无效打印(int a[]]
{

对于(int i=0;i和更适合,但可能会显示当(ab)适当地使用三元运算符和递归时,可以在一行代码中按多少…

x、y和z代表什么?告诉他您在一行
System.out.println(“2、4、9,+System.lineSeparator()+”6、8、1,+System.lineSeparator()+“7,3,5”,
:)您可以从删除无用的静态变量开始,然后使用新的
for
循环进行打印:
for(int i=0;i<3;i++){for(int j=0;j<3;j++){System.out.print(grid[i][j]+“,”;}System.out.println();}
。我想知道是否有可能压缩我的代码——听起来你可以找个人来@ROMANIA haha,如果可以的话only@cricket_007谢谢你的提醒,但我没有在这里发布太多内容,所以我不知道x、y和z代表什么?告诉他你是在一行
System.out.println(“2,4,9,”+System.lineSeparator()+“6,8,1,“+System.lineSeparator()+”7,3,5,”;
:)您可以先删除无用的静态变量,然后使用新的
for
循环进行打印:
for(int i=0;i<3;i++){for(int j=0;j<3;j++){System.out.print(grid[i][j]+”,”;)System.out.println();}
。我想知道是否可以压缩我的代码——这听起来像是你可以找个人来@ROMANIA haha,如果可以的话only@cricket_007谢谢你的提醒,但是我没有在这里贴太多,所以我不知道