#java #arrays #multidimensional-array
#java #массивы #многомерный массив
Вопрос:
Прежде всего, я сохраняю данные в 2D-массив, и код работает нормально. Код показан следующим образом,
for(int a = 0; a < bitmap1.getWidth(); a ){
// ------ This is X
for(int b = 0; b < bitmap1.getHeight()-1; b ){
// ---------- This is Y
intArray1[a][b] = Integer.toHexString(bitmap1.getPixel(a,b));
intArray2[a][b] = Integer.toHexString(bitmap2.getPixel(a,b));
intArray3[a][b] = Integer.toHexString(bitmap3.getPixel(a,b));
intArray4[a][b] = Integer.toHexString(bitmap4.getPixel(a,b));
intArray5[a][b] = Integer.toHexString(bitmap5.getPixel(a,b));
intArray6[a][b] = Integer.toHexString(bitmap6.getPixel(a,b));
intArray7[a][b] = Integer.toHexString(bitmap7.getPixel(a,b));
intArray8[a][b] = Integer.toHexString(bitmap8.getPixel(a,b));
}
}//end of Nested FOR
Затем я использую nested for loops
для изменения данных из arrays
, как указано выше. Однако это только 1st array
из моего 8 array
. Есть ли какой-либо другой способ сократить количество дублирующегося кода вместо копирования того же кода, как показано ниже, и выполнить преобразование из 1st array
в 8 array
?
int [][] arrayOneZero = new int [array1.length][array1.length];
for(int a = 0; a < array1.length; a ){
for(int b = 0; b < array1.length-1; b ){
if(array1[a][b].equals("ffffffff")){
//This is White
arrayOneZero[a][b] = 1;
}else if(array1[a][b].equals("ff000000")){
//This is Black
arrayOneZero[a][b] = 0;
}else if(array1[a][b].equals("00000000")){
//THis is Black
arrayOneZero[a][b] = 0;
}
}
После этого я хочу получить данные из метода, и результатом будет все 0, поскольку я почти уверен, что результатом будет 1 или 0. Но я не знаю, как записать данные из 2D-массива в массив, поскольку приведенный ниже код определенно неверен.
int [][] arrayReturned1 = getArrayText(intArray1);
int [] colorValue = new int[bitmap1.getWidth()*bitmap1.getHeight()];
for(int a = 0; a < bitmap1.getWidth(); a ) {
for(int b = 0; b < bitmap1.getHeight()-1; b ) {
arrayReturned1[a][b] = colorValue[a];
}
}
Вопрос отредактирован, но проблема по-прежнему остается.
Комментарии:
1.
arrayReturned1[a][b] = colorValue[a];
— ты не это имеешь в видуcolorValue[index] = arrayReturned1[a][b];
? Обратите внимание, что я использовалindex
здесь, потому что я предполагаю, что вы хотите преобразовать 2D-массив в одномерный массив. В этом случае длина массива была быwidth * height
иindex
либо была быa * height
илиb * width
в зависимости от того, хотите ли вы, чтобы данные хранились по столбцам или по строкам (что было бы более распространенным способом).2. Также обратите внимание, что в
getArrayText()
единственном условии, которое имеет какой-либо эффект, было быarray1[a][b].equals("ffffffff")
(кстати, я бы использовалequalsIgnoreCase(...)
) — все остальные ничего бы не сделали, потому что элементы массива уже инициализированы в 0. Кроме того, ваши комментарии немного вводят в заблуждение — обычно 1 представляет белый, а 0 черный (иffffffff
будет представлять белый с полной непрозрачностью, в то время какff000000
может представлять черный с полной непрозрачностью при использовании ARGB или красный с нулевой непрозрачностью при использовании RGBA).3. @Thomas поскольку я получаю массив из метода, например,
arrayReturned1[0][0]
значение равно 1, то я хочу, чтобы значение 1 добавлялось в массивcolorValue[0]
. Что-то вроде этого, и это переходит во вложенные циклы, посколькуarrayReturned1[a][b]
это 2D-массив..4. @Thomas кстати, спасибо за ответ.. для ARGB
#ffffffff
представляет черный, а черный равен 1. Я здесь ошибаюсь?5. Как я уже сказал, если вы хотите «добавить» значение
arrayReturned1[0][0]
вcolorValue
, вам нужно вызватьcolorValue[0] = arrayReturned1[0][0];
. Я также не уверен, что вы поняли или согласны с другой частью моего первого комментария: еслиarrayReturned1
имеет размеры5x3
, у вас есть 15 элементов (5 внутренних массивов по 3 элемента в каждом), поэтомуcolorValue
длина, вероятно, должна быть 15, а не 5, как в вашем коде (int [] colorValue = new int[bitmap1.getWidth()];
).
Ответ №1:
Что ж, я нахожу себе решение, в котором я использую arrayList
для хранения данных. И это работает нормально.
ArrayList<String>arrayList = new ArrayList<>();
for(int a = 0; a < bitmap1.getWidth(); a ){
for(int b = 0; b < bitmap1.getHeight(); b ){
String a1 = String.valueOf(arrayInput1[a][b]);
String a2 = String.valueOf(arrayInput2[a][b]);
String a3 = String.valueOf(arrayInput3[a][b]);
String a4 = String.valueOf(arrayInput4[a][b]);
String a5 = String.valueOf(arrayInput5[a][b]);
String a6 = String.valueOf(arrayInput6[a][b]);
String a7 = String.valueOf(arrayInput7[a][b]);
String a8 = String.valueOf(arrayInput8[a][b]);
arrayList.add(a1 a2 a3 a4 a5 a6 a7 a8); // Store 1110001 into ArrayList
}
}
Надеюсь, это может помочь кому-то еще.