Member 12880581 Ответов: 2

Как поместить два одномерных массива в один двумерный массив в java?


Я пытаюсь построить двумерный массив double X[][] из двух одномерных массивов X1[] и X2[].





Ввод осуществляется следующим образом:



X1 X2



0 1

0 2

1 2

1 5

2 3

2 4

3 4

3 5

4 5

4 6

5 6

5 7

6 7



И мой желаемый результат таков:



Икс



0 1

0 2

1 2

1 5

2 3

2 4

3 4

3 5

4 5

4 6

5 6

5 7

6 7






Однако он бросил исключение: java. lang.ArrayIndexOutOfBoundsException: 2





И идеи, намеки или примеры были бы очень ценны. Я хочу узнать, что я делаю неправильно.

Что я уже пробовал:

Вот фрагмент кода, который показывает реализацию массивов и некоторый контекст:

Previously in the code below is how X1[] and X2[] were initialized in line 10 and line 11 respectively:

 

    double[] degree = new double[numNodes];

 

                           for (int id = 0; id < numNodes; id++){

                                         Vector neighbors = (Vector) netInfo.get(id);

                                         System.out.println(id+" "+neighbors+" "+neighbors.size() );

                                         degree[id] = neighbors.size();

                           }

                                        

 

                           double X1[] = new double[edgeList.size()];

                           double X2[] = new double[edgeList.size()];

                           double Y[] = new double[edgeList.size()]; //EBWC which is also 1-NOVER

 

                           for (int edgeIndex = 0; edgeIndex < edgeList.size(); edgeIndex++){

 

                                         String edge = (String) edgeList.get(edgeIndex);

 

                                         StringTokenizer stk = new StringTokenizer(edge);

                                         int uID = Integer.parseInt(stk.nextToken());

                                         int vID = Integer.parseInt(stk.nextToken());

 

                                         X1[edgeIndex] = degree[uID];

                                         X2[edgeIndex] = degree[vID];                                                                                  

 

 

                                         Vector uNeighbors = (Vector) netInfo.get(uID);

                                         Vector vNeighbors = (Vector) netInfo.get(vID);

 

                                         // finding the intersection

 

                                         Vector commonNeighbors = new Vector();

 

                                         for (int uindex = 0; uindex < uNeighbors.size(); uindex++){

                                        

                                                       int uNeighbID = ( (Integer) uNeighbors.get(uindex) ).intValue();

 

                                                       if (vNeighbors.contains(uNeighbID)) {

                                                                    commonNeighbors.add(uNeighbID);

                                                       }

                                                      

 

                                                       // check if uNeighbID is in vNeighbors

                                                       // if it is there, add uNeighbID to commonNeighbors

 

                                         }                                       

 

 

                                         // finding the union

                                         Vector AllNeighbors = (Vector) uNeighbors.clone();

 

                                         //Set<Integer> temp=new HashSet<Integer>();

 

                                        

 

                                         for(int vindex = 0; vindex < vNeighbors.size(); vindex++){

                                                       //temp.add(i);

                                                       int i = ( (Integer) vNeighbors.get(vindex) ).intValue();

                                                      

                                                       if (!AllNeighbors.contains(i))

                                                                    AllNeighbors.add(i);

 

                                         }

 

                                                      

             

 

 

                                         double NOVER = 0;

 

                                         if (AllNeighbors.size() > 2)

                                                       NOVER = ( (double) commonNeighbors.size() )/ (AllNeighbors.size()-2);

                                        

                                         Y[edgeIndex] = 1 - NOVER;

                                         // using the intersection and union, find EBWC scores for the edge uID-vID as 1-NOVER(uID, vID)

                                         // put uID vID and the EBWC score for the edge to the TreeMap EBWC

 

 

                                         System.out.println(edgeIndex+" "+X1[edgeIndex]+" "+X2[edgeIndex]+" "+Y[edgeIndex]);

 

 

                           }



// постройте двумерный массив X [] [], используя X1[] и X2[]



double [] [] X = {X1, X2};





для (тип int параметр rowindex = 0; параметр rowindex &ЛТ; edgeList.размер(); параметр rowindex++){



for (int colIndex = 0; colIndex < 2 (); colIndex++){



Системы.из.печать(х[параметр rowindex][colIndex]+" ");



}



Системы.из.код println();



}

2 Ответов

Рейтинг:
1

Peter Leow

Ознакомьтесь со следующим фрагментом кода и адаптируйтесь к вашим требованиям:

public class Main {

    public static void main(String[] args) {
        
        int[] x1 = {1,2,3};
        int[] x2 = {4,5,6};
        int[][] x = new int[3][2];
    
        for (int i=0;i<x1.length;i++){
            x[i][0]=x1[i];
        }
    
        for (int i=0;i<x2.length;i++){
            x[i][1]=x2[i];
        }
    
    
        for (int i = 0; i < x.length; i++) {
            for (int j = 0; j < x[i].length; j++) {
                System.out.print(x[i][j] + " ");
            }
            System.out.println();
        }
    }
    
}

В примере получается два 1D массива:
x1: 1,2,3
x2: 4,5,6

в 2D массив:
x:
1 4
2 5
3 6

Обратите внимание, что некоторые циклические блоки кода можно превратить в метод для лучшего повторного использования. Это вам предстоит обдумать.


Рейтинг:
0

ridoy

Очень трудно читать такой неформатированный код!

Используйте список / ArrayList, чтобы поместить ваши 2-мерные элементы массива, а затем скормить массив из него.
Следовать:
java-преобразование 2D-массива в 1D-массив-переполнение стека[^]
Как преобразовать 2-мерный массив в 1-мерный массив в Java-Stack Overflow[^]