Magic Square Java程序

时间:2011-09-15 03:39:49

标签: java multidimensional-array magic-square

//凯文克莱门特 // Week3A Magic Squares

嘿所有,对2维数组进行介绍性分配。以下是我已经完成的代码。

我遇到的问题是我不完全确定如何打印出数组,以及使用测试方法让所有内容正确运行。我在msq [order] [order] = 1;

这一行出错了

如果我的问题格式错误,我很抱歉,仍然不习惯这个网站。任何帮助都会很棒。谢谢!

import java.util.*;

class Magic
{
  private int order;
  int msq[ ][ ];

  public Magic(int size)
  {
     if(size < 1 || size % 2 == 0)
     {
        System.out.print("Order out of range");
        order = 3;
     }
     msq = new int[order][order];
     Build();
     Display();
   }

  public void Build()
   {
     int row = 0;
     int col =0;
    msq[order][order] = 1;

     for(int k = 1; k <= order * order; k++)
     {
        msq[row][col] = k;

        if(row == 0 && col == order -1)
           row++;
        else if(row == 0)
        {
           row = order - 1;
           col++;
        }
        else if(msq[row - 1][col + 1] != 0)
           row++;
        else if(msq[row -1][col + 1] == 0)
        {
           row--;
           col++;
        }
        if(col == order - 1)
        {
           col = 0;
           row--;
        }

     }
  }
  public void Display()
  {

     for(int i = 0; i < order; i++)
     {
        for(int k = 0; k < order; k++)
        {
           System.out.println(msq[i][k] + " ");
        }
     }


  }
}

4 个答案:

答案 0 :(得分:2)

  

我在msq [order] [order] = 1;

行出错了
msq = new int[order][order];
// ..
msq[order][order] = 1;

如果数组大小为 n ,则需要访问 0 n-1 的元素。没有第n个索引。在您的情况下,没有订单订单索引。它只是从 0 order-1 ,并且是数组索引超出范围异常的原因。

答案 1 :(得分:2)

构造函数中出现这种情况的原因是什么?:

if(size < 1 || size % 2 == 0)
 {
    System.out.print("Order out of range");
    order = 3;
 }

请注意,无论何时使用不满足if子句的大小输入,都不会初始化变量顺序,默认为0.因此,2d数组的大小为零,并抛出越界错误。如果您尝试使用3作为默认值,那么您想移动该行:

order = 3;
之前的

需要考虑的其他事项: 1.使订单变量最终,因为你不打算改变它。如果您这样做,Eclipse IDE会警告您上述情况。

或 2.如果您要将订单值默认为3,则将其初始化为此。

private int order = 3

此外,您可以考虑打印一条消息,说明当条件不满足时,订单默认为三。

答案 2 :(得分:0)

在Java中打印整数矩阵

for (int i = 0; i < order; i++) {
    for (int k = 0; k < order; k++) {
       System.out.printf("%6d", msq[i][k]);
    }
    System.out.println();
 }

Mahesh回答了你问题的第二部分。

答案 3 :(得分:0)

msq [order] [(order] = 1;

- &GT;这是语法错误。你有'('。 你得到了绑定错误的结束,因为数组从0开始而不是1(这是每个初学者犯的错误)因此将其更改为msq [order-1] [order-1] = 1;

上面的答案是打印出数组的正确方法。