Java-программа Magic Square - PullRequest
       15

Java-программа Magic Square

0 голосов
/ 15 сентября 2011

// Кевин Клемент // Week3A Магические квадраты

Привет всем, выполняем вводное задание для двухмерных массивов.Ниже приведен код, который я сделал и который в значительной степени готов.

Моя проблема, которую я получаю, заключается в том, что я не совсем уверен, как распечатать массив, а также как заставить все работать правильно с помощью тестового метода.Я получаю ошибку за границей в строке 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 ]

2 голосов
/ 15 сентября 2011

В чем причина этого условия в конструкторе?:

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

Обратите внимание, что всякий раз, когда вы используете вход размера, который не удовлетворяет условию if, порядок переменных не инициализируется и по умолчанию равен0. В результате массив 2d имеет нулевой размер и выбрасывает ошибку «за пределами».Если вы пытаетесь использовать 3 в качестве значения по умолчанию, то вы хотите переместить строку:

order = 3;

перед блоком if.

Другие вопросы, которые следует учитывать: 1. сделать заказпеременная окончательная, так как вы не планируете ее менять.Eclipse IDE предупредит вас о ситуации, описанной выше, если вы сделаете это.

или 2. Если вы собираетесь установить значение порядка по умолчанию 3, инициализируйте его так.

private int order = 3

Также вы можете рассмотреть возможность печати сообщения о том, что по умолчанию порядок равен трем, когда условие не выполняется.

2 голосов
/ 15 сентября 2011

Я получаю ошибку за пределами строки msq [order] [order] = 1;

msq = new int[order][order];
// ..
msq[order][order] = 1;

Если размер массива равен n ,тогда вам нужно получить доступ к элементам от 0 до n-1 .Нет n-го индекса.В вашем случае нет порядка , порядка индекса.Это только от 0 до order-1 и является причиной исключения индекса массива за пределы границ.

0 голосов
/ 15 сентября 2011

msq [order] [(order] = 1;

-> здесь есть синтаксическая ошибка. У вас есть '('. Вы получаете ошибку конца привязки, потому что массив начинается с 0, а не 1 (что является ошибкой каждого новичка) поэтому измените ее на msq [order-1] [order-1] = 1;

Ответ выше - правильный способ распечатать массив.

0 голосов
/ 15 сентября 2011

Для печати матрицы целых чисел в 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();
 }

На вторую часть вашего вопроса отвечает Махеш.

...