Java: Как разделить 2d массив на два 2d массива - PullRequest
2 голосов
/ 28 марта 2011

Я пишу программу для максимально эффективного умножения матриц (2d-массивов), и для этого мне нужно разделить два моих массива на два и отправить их во вторую программу для умножения. У меня есть проблема, как разделить 2d массив на два 2d массива в определенных точках (на полпути). У кого-нибудь есть идеи?

1 Ответ

6 голосов
/ 28 марта 2011

Допустим, у вас есть двумерный массив строк, например, так:


String[][] array= new String[][]
{
    {"a","b","c"},
    {"d","e","f"},
    {"h","i","j"},
    {"k","l","m"}
};

Теперь вам нужен способ разбить эти массивы на полпути.Позволяет получить точку на полпути.Выясните, насколько большой массив, а затем разрезайте его пополам.Обратите внимание, что вы также должны обрабатывать, если массив не имеет четной длины.Пример, длина 3. Если это так, мы будем использовать функцию Math.floor().


int arrayLength = array.length;
int halfWayPoint = Math.floor(arrayLength/2);
//we also need to know howmany elements are in the array
int numberOfElementsInArray = array[0].length;

Теперь у нас есть вся информация, необходимая для создания двух двумерных массивов из одного.Теперь мы должны явно скопировать создать и скопировать данные поверх.


//the length of the first array will be the half way point which we already have
String [][] newArrayA = new String[halfWayPoint][numberOfElementsInArray];
//this copies the data over
for(int i = 0; i &lt halfWayPoint; i++)
{
    newArrayA[i] = array[i];
}

//now create the other array
int newArrayBLength = array.length - halfWayPoint;
String[][] newArrayB = new String[newArrayBLength][numberOfElementsInArray];
/*
 * This copies the data over. Notice that the for loop starts a halfWayPoint.
 * This is because this is where we left of copying in the first array.
 */
for(int i = halfWayPoint; i &lt array.length; i++)
{
    newArrayB[i] = array[i];
}

И все готово!

Теперь, если вы хотите сделать это немного лучше, вы можете сделать это следующим образом


int half = Math.floor(array/2);
int numberOfElementsInArray = array[0].length;
String [][] A = new String[half][numberOfElementsInArray];
String [][] B = new String[array.length - half][numberOfElementsInArray];
for(int i = 0; i &lt array.length; i++)
{
    if(i &lt half)
    {
        A[i] = array[i];
    }
    else
    {
        B[i] = array[i];
    }

}

И, наконец, если вы не хотите делать это явно, вы можете использовать встроенные функции.System.arraycopy() является одним из примеров.Вот ссылка на его API System.arraycopy ()


int half = Math.floor(array/2);
int numberOfElementsInArray = array[0].length;
String [][] A = new String[half][numberOfElementsInArray];
String [][] B = new String[array.length - half][numberOfElementsInArray];
System.arraycopy(array,0,A,0,half);
System.arraycopy(array,half,B,0,array.length - half);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...