Динамическое создание массивов

207
10 марта 2018, 19:26

Написал функции для создания и инициализации одномерного массива и матрицы. Как в main вывести оба массива в консоль?

import java.lang.reflect.Array.*;
public class ArrC {
  public static Object arrC (Class cls, int size){
    size = 5;
    Object arr = java.lang.reflect.Array.newInstance(cls, size);
    for (int i = 0; i < size; i++){
        if (cls.isPrimitive()){
            java.lang.reflect.Array.set(arr, i, 2);
        }
    }
     return arr;
}
public static Object matrixC(Class cls, int row, int col){
    row = 7;
    col = 5;
    Object matrix = java.lang.reflect.Array.newInstance(cls,  row, col);
    for (int i = 0; i < Array.getLength(row); i++ ){
        for (int j = 0; j < Array.getLength(col); j++){
            if (cls.isPrimitive()){ 
                java.lang.reflect.Array.set(matrix, i, 7);
                java.lang.reflect.Array.set(matrix, j, 5);
            }
        }
    }
    return matrix;
}
public static void main (String[] args){
    StringBuilder s = new StringBuilder();
    StringBuilder s1 = new StringBuilder();
    s.append(arrC(ArrC.class ,5));
    System.out.print(s);
    s1.append(matrixC(ArrC.class , 7, 5));
}
 }
Answer 1

Для массивов существует метод Arrays.toString(arr) В методе matrixC у Вас была ошибка: вместо Array.getLength(row) Array.getLength(col) используйте просто row и col

import java.lang.reflect.Array;
import java.util.Arrays;
public class ArrC {
  public static Object arrC (Class cls, int size){
    size = 5;
    Object arr = java.lang.reflect.Array.newInstance(cls, size);
    for (int i = 0; i < size; i++){
      if (cls.isPrimitive()){
        java.lang.reflect.Array.set(arr, i, 2);
      }
    }
    return arr;
  }
  public static Object matrixC(Class cls, int row, int col){
    row = 7;
    col = 5;
    Object matrix = java.lang.reflect.Array.newInstance(cls,  row, col);
    for (int i = 0; i < row; i++ ){
      for (int j = 0; j < col; j++){
        if (cls.isPrimitive()){
          java.lang.reflect.Array.set(matrix, i, 7);
          java.lang.reflect.Array.set(matrix, j, 5);
        }
      }
    }
    return matrix;
  }
  public static void main (String[] args){
    String s = Arrays.toString((int[])arrC(int.class ,5));
System.out.println(s);s.toString());
    System.out.println();
    StringBuilder s1 = new StringBuilder();
    ArrC[][] arrCs = ((ArrC[][])matrixC(ArrC.class, 7, 5));
    for (ArrC[] arrC1 : arrCs) {
      s1.append(Arrays.toString(arrC1))
        .append("\n");
    }
    System.out.println(s1);
  }
}
READ ALSO
recursive fill sudoku java

recursive fill sudoku java

getSupposedNums(i,j) возвращает массив возможных вариантов для ячейки i,j, работает корректно

201
Spring security ошибка при авторизации (403)

Spring security ошибка при авторизации (403)

Пробую сделать произвольный AuthenticationProviderПока просто поставил println, чтобы он высвечивал данные о пользователе, если в него система обратится

185
Java+RabbitMQ, проверить сообщения в очереди на застой

Java+RabbitMQ, проверить сообщения в очереди на застой

Два дня сижу, не могу дойти до решения проблемыУ меня есть некая очередь

151
Java(LibGdx) java.lang.StackOverflowError

Java(LibGdx) java.lang.StackOverflowError

Правельно ли я понимают, что нельзя создавать массив обьекта Tube[] в этом же классе TubeЕсли да, то почему? Как по другому реализовать это?

173