Java - 2-мерный массив с конструктором и методом - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в Java и должен создать метод, который печатает «A» для каждого четного числа в двумерном массиве (Университет проекта). Результат должен выглядеть так:

Результат. Линии только для лучшего понимания

The result. Lines are just for better understanding

Основная задача говорит, что она должна работать с каждым размером поля n. Дана переменная поля char[][] field; и конструктор с параметром public Pattern(int n). Требуется конструктор.

1.) Первый вопрос:

Я не уверен, что смогу получить доступ к полю переменных внутри конструктора, потому что оно находится в его области видимости. Есть ли возможность объявить размер поля в конструкторе, передать его моему методу и, наконец, вывести весь класс с желаемым результатом?

2.) Второй вопрос:

Как будет выглядеть альтернатива без данного конструктора?

Вот мой код:

public class Pattern {

  char[][] field;

  public Pattern(int n) {
     if (n < 5) n = 5;
     if (n % 2 == 0) n = n + 1;
     field = new char[n][n];
  }

  public void fillArrayWithA() {
     for (int i = 0; i <= 5; i++) {
         for (int j = 0; j <= 5; j++) { 
             if ((i + j) % 2 == 0) {
                 System.out.println('A');
             } else {
                 System.out.println(' ');
             }
         }
         System.out.println("\n");
      }
   }

  public static void main(String[] args) {
     Pattern firstex = new Pattern(5);
     firstex.fillArrayWithA();
     System.out.println(firstex);
  }
}

Примеры кода были бы великолепны !!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы можете создать поле с размером или использовать field.length. Использование final предотвращает дальнейшее назначение полей. this.n позволяет иметь поле с тем же именем, что и у параметра n.

  final char[][] field;
  final int n;

  public Pattern(int n) {
     n = Math.max(5, n) | 1; // If understandable
     this.n = n;
     field = new char[n][n];
  }

  public void fillArrayWithA() {
     for (int i = 0; i < field.length; i++) { // or n
         for (int j = 0; j < n; j++) { // or field[i].length
             field[i][j] = (i + j) % 2 == 1 ? 'A' : ' ';

Обратите внимание, что new int[3] будет иметь значения индекса 0, 1, 2. Следовательно, i < n.

0 голосов
/ 25 апреля 2018

Вот мое решение, я снял ограничения, что массив должен быть квадратным, но это требование легко добавить обратно. Размер массива я получу позже, используя атрибут length . Я также добавил метод toString () для печати массива.

public class Pattern {
  private char [][] field;

  public Pattern(int size) {
    field = new char [size][size];
  }

  public void fillField() {
    int size = field.length;
    for(int i = 0; i < size; i++) {
      for (int j = 0; j < size; j++) {
        int value = i+j + 1;
        field[i][j] = value % 2 == 0 ? 'A' : ' ';
      }
    }
  }

  public String toString() {
    int size = field.length;

    StringBuilder builder = new StringBuilder(size * size);

    for(int i = 0; i < size; i++) {
      for (int j = 0; j < size; j++) {
        builder.append(field[i][j]);
        builder.append(',');
      }
      builder.append('\n');
    }
    return builder.toString();
  }

  public static void main(String[] args) {
    Pattern p = new Pattern(5);
    p.fillField();
    System.out.print(p);
  }
}

Чтобы избежать конструктора, тогда заставьте fillField принять размер в качестве параметра (ов) и инициализировать массив там.

public void fillField(int size) {
  field = new char [size][size];

 ....
}

Лучше всего иметь конструктор в том, что вы знаете, что поле члена инициализируется перед его использованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...