当前位置: 首页 > 面试题库 >

在Java中创建魔术广场

梁新觉
2023-03-14
问题内容

我必须编写一个程序,该程序需要用户输入一个奇数并创建一个幻方。幻方是指行,列和对角线的总和相同的正方形。这些是编写代码的特征:

  1. 向用户询问一个奇数
  2. 创建一个n x n数组。
  3. 请按照以下步骤创建一个魔术方块。
    一个。在第一行的中间放置一个1。
    b。从行中减去1,然后在列中加1。
    一世。如果可能,将下一个数字放在该位置。
    ii。如果不可能,请按照下列步骤操作。
    1. 如果在第-1行,则更改为最后一行
    2. 如果在最后一列中更改为第一列
    3. 如果被阻止,则下拉至下一行(从原始位置开始)
    4. 如果在右上角,则下拉至下一行。


  4. 打印数组

我已经编写了代码,但是当我运行它时,程序将输入除第二个数字以外的所有数字;由于某种原因,我的程序跳过了它。例如,如果我将数字3作为奇数输入,则输出为:

6 1 0 
3 4 5 
9 7 8

不应该有0,但是第二个是。这是我的代码:

public static void main(String[] args) {
    System.out.print("Give an odd number: ");
    int n = console.nextInt();
    int[][] magicSquare = new int[n][n];

    int number = 1;
    int row = 0;
    int column = n / 2;
    while (number <= n * n) {
        magicSquare[row][column] = number;
        number++;
        row -= 1;
        column += 1;
        if (row == -1) {
            row = n - 1;
        }
        if (column == n) {
            column = 0;
        }
        if (row == 0 && column == n - 1) {
            column = n - 1;
            row += 1;
        } else if (magicSquare[row][column] != 0) {
            row += 1;
        }
    }

    for (int i = 0; i < magicSquare.length; i++) {
        for (int j = 0; j < magicSquare.length; j++) {
            System.out.print(magicSquare[i][j] + " ");
        }
        System.out.println();
    }
}

有人可以告诉我我哪里出了错,为什么我的程序跳过了数字2?*这是一个作业问题,因此代码只能回答。谢谢。


问题答案:

删除3.4可能会修复您的代码。

public static void main(String[] args) {

    System.out.print("Give an odd number: ");
    int n = console.nextInt();
    int[][] magicSquare = new int[n][n];

    int number = 1;
    int row = 0;
    int column = n / 2;
    int curr_row;
    int curr_col;
    while (number <= n * n) {
        magicSquare[row][column] = number;
        number++;
        curr_row = row;
        curr_col = column;
        row -= 1;
        column += 1;
        if (row == -1) {
            row = n - 1;
        }
        if (column == n) {
            column = 0;
        }
        if (magicSquare[row][column] != 0) {
            row = curr_row + 1;
            column = curr_col;
            if (row == -1) {
                row = n - 1;
            }
        }
    }

    for (int i = 0; i < magicSquare.length; i++) {
        for (int j = 0; j < magicSquare.length; j++) {
            System.out.print(magicSquare[i][j] + " ");
        }
        System.out.println();
    }
}

设置n = 3可获得以下输出,该输出似乎正确。

8 1 6 
3 5 7 
4 9 2


 类似资料:
  • 问题内容: 我的任务是编写一个询问用户输入的程序,该方法将返回输入是否形成幻方。无论我输入到控制台什么,程序都会返回我输入了一个魔术方块。我想念什么? 幻方定义:如果行,列和对角线的总和相同,则二维数组就是幻方。 问题答案: 您没有保存输入的内容,因此将0x0 square传递给。 许多方面的实现是错误的。 条件应该是。 您只需要在计算完成后检查即可。 您必须先进行初始化,然后再计算它们。 您应该

  • Python 中有很多 __ 开始和结尾的特殊方法,它们多是所有类型都拥有的,通过实现这些 特殊方法可以实现很多有意思的功能,比如最常使用的 __str__、__repr__ 和 __unicode__ 这三个就可以用于输出对象的字符串结果。 GitHub 上有篇翻译不错: 翻译 原文 魔术方法与语法糖 Lisp 的语法极其简单,主要语法“S 表达式”非常接近于数学中的波兰表达式,写法如下: (+

  • 问题内容: 我在服务器上编译我的代码并下载并尝试在我的计算机上运行它时遇到了一个奇怪的错误。 我基本上是在EC2实例上编译一些Java文件,然后将它们加载到存储中供以后使用。 当我将文件下载到计算机上并尝试运行它们时,出现以下错误: 我正在使用以下方法编译文件: 并使用此方法上传文件: 有人知道我在做什么错吗?当我在计算机上编译这些类文件时,这些类文件是可运行的,但是当我将它们上传到云中并下载它们

  • 问题内容: 根据PHP手册,为了使代码更易于移植,他们建议使用类似于以下内容的转义数据: 我还有其他将要执行的验证检查,但是从转义数据的角度来看,上述检查严格地安全吗?我还看到在PHP 6中将不再使用魔术引号。这将如何影响上述代码?我希望不必依赖于特定于数据库的转义函数,例如mysql_real_escape_string()。 问题答案: 魔术引号天生就坏了。它们本来是要清理PHP脚本的输入,但

  • 所以我试图摆脱我主要方法中的两个神奇数字。我试着让它们成为静态字段,但我只是得到了一个不同的checkstyle错误。我正在寻找一种方法,使我的主要方法完全符合checkstyle。 这些是我得到的检查风格错误: '2000'是个神奇的数字 “262”是一个神奇的数字 以下是我将其设置为静态字段时出现的checkstyle错误: 名称“Twoou”必须与模式“^[A-Z][A-Z0-9]*([A-

  • 主要内容:__LINE__,实例,__FILE__,实例,__DIR__,实例,__FUNCTION__,实例,__CLASS__,实例,__TRAIT__,实例,__METHOD__,实例,__NAMESPACE__,实例PHP 向它运行的任何脚本提供了大量的预定义常量。 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。 有八个魔术常量它们的值随着它们在代码中的位置改变而改变。 例如 __LINE__ 的值就依赖于它在脚本中所