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




Создание матриц в 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. Есть много странного поведения, которое я ужасно постарался объяснить.
Сгенерируйте случайное положительное целое число и выделите массив этого размера. Или вы не полностью объяснили свою проблему?