Создание универсальной матрицы Java

Я хочу создать матрицу общего типа в java, размер которой будет рандомизирован.

Как лучше всего подойти к этому?

Сгенерируйте случайное положительное целое число и выделите массив этого размера. Или вы не полностью объяснили свою проблему?

AJNeufeld 16.03.2018 05:24

Что такое «размерный размер»? Вы имеете в виду «размер» или «количество измерений» ... или и то, и другое. А что подразумевается под родовой матрицей? Общая матрица ... или матрица, тип элемента которой является идентификатором универсального типа Java?

Stephen C 16.03.2018 06:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
929
1

Ответы 1

Создание матриц в Java не так удобно, как, скажем, R, или Matlab, или даже C. Очень сильная парадигма ввода в Java означает, что все должно быть определено или инициализировано. Таким образом, вы не можете просто использовать Integer [x] [y] [z]. За пределами массива массивов все становится непросто.

Разница в том, что обычная матрица, перемещающаяся по + x, -x, + y, -y, + z, -z, по сути, эквивалентны. Однако в Java, если вы хотите думать о трех измерениях матрицы, они являются направленными. Это означает, что вам нужно пройти X, затем пройти Y, затем пройти Z, всегда в этом порядке. И чтобы переместиться, скажем, x + 1, вам нужно вернуться вниз по z, назад по y, а затем переместить свою позицию x, затем развернуться и снова пройти y и снова z. Я не уверен, что это имело смысл. но именно так я должен думать о матрицах в Java, иначе я начну делать ошибки кодирования.

Существуют библиотеки для java, которые ориентированы на создание матрицы. Вы можете посмотреть там. http://ejml.org/wiki/index.php?title=Main_Page

Простое создание случайного массива массивов (псевдоматрицы, как описано выше) в целом не кажется сложным.

import java.util.Random;

public class Rand
{
   public static void main(String[] args)
   {
      Random random = new Random();
     int dim1 = random.nextInt( 10 );
      int dim2 = random.nextInt( 10 );
      int dim3 = random.nextInt( 10 );

      int[][][] matrix = new int[dim1][dim2][];

      //use dim 3 when you do the specific the declaration for the 3rd dimension

   }

}

Быстрый пробег по некоторым примерам - Int myIntArray = новый int [15]; Создает массив из 15 элементов int, инициализированный значением по умолчанию для этого типа, равным 0 для
. // - Присвоение значений myIntArray [2] = 5; // = 0 0 5 0 0 myInt = myIntArray [2]; myInt = 5;

// @Initializing with values

   int[5] myIntArray = { 5, 10, 15, 20, 25 };
   int[] myIntArray = { 5, 10, 15, 20, 25 };

Многомерный массив не похож на матрицу в C. Все измерения одного типа. Каждый элемент является независимым массивом. Каждый элемент массива более раннего измерения является массивом. Все измерения одного типа, и каждый элемент является независимым массивом. В Java каждый элемент многомерного массива, кроме последнее измерение - это массив, а не отдельный элемент // Два тусклых массива

  int[][] myIntArray2;
  //Or
  int myIntArray[][];

Для выделения используйте оператор new. Распределение инициализируется значением DEFault. type.В этом случае вы инициализируете массив массивов, поэтому DEFault тип равен нулю.

  int[][] myIntArray2d = new int[5][];
  myIntArray2d[3] = new int[5];

Итак, присвоив массив выше, вы получите

  null Null 0 Null Null
  []    []  0 []   [] 
  []    []  0 []   [] 
  []    []  0 []   [] 
  []    []  0 []   [] 

Пустые значения по умолчанию в первом поле равны нулю - это тип массива по умолчанию. Второе измерение должно быть инициализировано перед доступом.

  char[][] charArray = new char[36][];

  //But I cant save anything into  

 charArray[4][0]; 

  //because it has not been initialized with a separate new statement.
  //This is why you leave the 3rd dim off until later.

 char[5]  = new char[5]; // WRONG
  char[] f = new char[5];
  //Now I can follow that with
  charArray[5][5] = 'a';  
  //or from about
  intArray[5][5][5]= 3;
  // But you cant declare the final dimension until later.

  int[3][] arr =  ( { 1, 2, 3 }, { 1, 2 }, { 5, 10, 15, 20 });
  //is an array[2] with 3 arrays
  int[][] arr =   { 1, 2, 3 }, { 1, 2 }, { 5, 10, 15, 20 }; 
  //is an array[2] with 3 arrays

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

При копировании массива в переменную - т.е.

  charArrayvars = charArray[5]
  int[] Copies= { 0, 0, 0, 0, 0  } //as a pointer not the data.

  // This means that
  int[3] ArrayA = { 1, 2, 3 };
  Int[3] ArrayB = { 4, 5, 6 };
  ArrayB = Array A;

  //So ArrayB now references Array A.
   //Now if I set

  ArrayA[0] = 0; //then
   if ( ArrayB[0] = 0 &&  ArrayA==ArrayB.){}
  //  The logic comparator really just shows they use the same reference.

Хотя, думаю, я бы оценил ваши цели и посмотрел, есть ли другой выход. Или, может быть, использовать библиотеку. Потому что матрица, о которой вы думаете, не является родной для Java. Есть много странного поведения, которое я ужасно постарался объяснить.

Другие вопросы по теме