Java - 具有构造函数和方法的二维数组

时间:2018-04-25 09:48:28

标签: java multidimensional-array methods constructor void

我是Java的新手,必须创建一个方法,在二维数组(Project university)中为每个偶数打印出“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 :(得分:1)

这是我的解决方案,我已经删除了阵列需要正方形的限制,但很容易添加该要求。我稍后使用 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将size作为参数并在那里初始化数组。

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

 ....
}

拥有构造函数最好的事情是你知道在使用它之前初始化了成员字段。

答案 1 :(得分:0)

您可以使用维度创建字段,或使用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]

请注意,i < n的索引值为0,1,2。因此2018-04-25T10:30:00.677+0000,ERROR,[Control connection] Cannot connect to any host, scheduling retry in 1000 milliseconds 2018-04-25T10:30:01.678+0000,ERROR,[Control connection] Cannot connect to any host, scheduling retry in 2000 milliseconds 2018-04-25T10:30:03.679+0000,ERROR,[Control connection] Cannot connect to any host, scheduling retry in 4000 milliseconds 2018-04-25T10:30:07.679+0000,ERROR,[Control connection] Cannot connect to any host, scheduling retry in 8000 milliseconds