double signof(double a) { return (a == 0) ? 0 : (a<0 ? -1 : 1); }
Попробуйте заменить соответствующие строки на:
myStringArray[0][x-1] = "a string";
myStringArray[0][y-1] = "another string";
Ваш код неверен, потому что подмассивы имеют длину y
, а индексирование начинается с 0. Поэтому установка на myStringArray [0] [y]
или myStringArray [0] [x]
завершится ошибкой, потому что индексы x
и y
находятся вне границы.
String [] [] myStringArray = new String [x] [y];
- правильный способ инициализировать прямоугольный многомерный массив. Если вы хотите, чтобы он был зубчатым (каждый подмассив потенциально имеет разную длину), вы можете использовать код, аналогичный в этом ответе . Обратите внимание, однако, что утверждение Джона о том, что вы должны создавать подмассивы вручную, неверно в том случае, если вам нужен идеально прямоугольный многомерный массив.
Вы можете объявлять многомерные массивы, например:
// 4 x 5 String arrays, all Strings are null
// [0] -> [null,null,null,null,null]
// [1] -> [null,null,null,null,null]
// [2] -> [null,null,null,null,null]
// [3] -> [null,null,null,null,null]
String[][] sa1 = new String[4][5];
for(int i = 0; i < sa1.length; i++) { // sa1.length == 4
for (int j = 0; j < sa1[i].length; j++) { //sa1[i].length == 5
sa1[i][j] = "new String value";
}
}
// 5 x 0 All String arrays are null
// [null]
// [null]
// [null]
// [null]
// [null]
String[][] sa2 = new String[5][];
for(int i = 0; i < sa2.length; i++) {
String[] anon = new String[ /* your number here */];
// or String[] anon = new String[]{"I'm", "a", "new", "array"};
sa2[i] = anon;
}
// [0] -> ["I'm","in","the", "0th", "array"]
// [1] -> ["I'm", "in", "another"]
String[][] sa3 = new String[][]{ {"I'm","in","the", "0th", "array"},{"I'm", "in", "another"}};
Вы также можете использовать следующую конструкцию:
String[][] myStringArray = new String [][] { { "X0", "Y0"},
{ "X1", "Y1"},
{ "X2", "Y2"},
{ "X3", "Y3"},
{ "X4", "Y4"} };