10
votes

Comment convertir un tableau 1D en tableau 2D?

dire, j'ai un tableau 1D avec 30 éléments: xxx pré>

Comment convertir le tableau 1D en tableau 2D?
Dites 10x3? P>

array2d[0][0] = 1 array2d[0][1] =2 array2d[0][2] =3
.
.
.
array2d[9][0] = 28 array2d[9][1] =29 array2d[9][2] =30


0 commentaires

9 Réponses :


16
votes
int array2d[][] = new int[10][3];


for(int i=0; i<10;i++)
   for(int j=0;j<3;j++)
       array2d[i][j] = array1d[(j*10) + i]; 

5 commentaires

THX! Comment si mon élément de tableau n'est pas un numéro continu, mais un nombre aléatoire? Comment puis-je modifier la boucle pour faire cela?


Son code est indépendant de tout ce que la matrice tient, de sorte qu'il fonctionnera pour tout élément de tableau


array2d [i] [j] = array1d [(J * 10) + i]; est faux. Il devrait être array2d [i] [j] = array1d [j% 3 + i * 3];


Cela ne fonctionne pas correctement pour moi. J'ai tenté de l'utiliser pour convertir une matrice INT de 1D de codes de couleur d'image en une matrice 2D, mais l'image résultante est pivotée par 90 degrés.


arr2d [i] [j] = (int) arr1d [(i * 3) + j]; fonctionne aussi



-2
votes

Vous ne pouvez pas "convertir" un tableau 1D en une matrice 2D, mais un tableau peut être multi-dimensionnaire lorsque vous le déclarez.

int myArray2d[][] = new int[10][3]


0 commentaires

16
votes

sans écrire de code pour vous ...

  • Pensez à la taille de votre matrice 2D.
  • Reconnaissez que vous aurez besoin de boucler sur le contenu de votre matrice source pour obtenir chaque valeur dans votre réseau de destination.

    Donc, il ressemblera à quelque chose comme ...

    • Créez un tableau 2D de taille appropriée.
    • Utilisez A pour une boucle pour boucler sur votre tableau 1D.
    • à l'intérieur de celle de la boucle, vous devez déterminer où chaque valeur dans le tableau 1D devrait aller dans la matrice 2D. Essayez d'utiliser la fonction MOD contre votre variable de compteur pour "envelopper" les indices du tableau 2D.

      Je suis intentionnellement vague, voyant qu'il s'agit de devoirs. Essayez de poster du code afin que nous puissions voir où vous êtes coincé.


0 commentaires

4
votes
public class Test{

    public static void main(String[] argv)
    {
        int x,y;
        for(int num =0; num<81;num++)
        {
            if((num % 9)>0)
            {
                x = num/9;
                y = num%9;

            }else
            {
                x = num/9;
                y = 0;
            }

            System.out.println("num ["+num+"]---["+x+","+y+"]");

        }
    }
}
/* Replace  9 by the size of single row of your 2D array */

1 commentaires

Veuillez vous abstenir d'ajouter uniquement des réponses de code sans explication



5
votes

Voici une fonction générique à convertir de 1D -> Array 2D: xxx

Si vous voulez faire le contraire (2D -> 1D), la fonction: < Pré> xxx


1 commentaires

Cela ne fonctionne pas correctement pour moi. J'ai tenté de l'utiliser pour convertir une gamme de codes de couleur d'image en une matrice 2D, mais l'image résultante est tournée de 90 degrés et a également des lignes verticales à travers elle.



1
votes
int[] oneDArray = new int[arr.length*arr.length];
    //Flatten 2D array to 1D array...
    int s = 0;
    for(int i = 0; i < arr.length; i ++) 
          for(int j = 0; j < arr.length; j ++){                           
              oneDArray[s] = arr[i][j];
              s++;
          } 

1 commentaires

BTW, l'OP était pour la direction opposée.



2
votes

Vous trouverez souvent le même problème: comment manipuler une matrice 2D en tant que tableau 1D. J'ai écrit une grille de classe générique qui permet d'accéder aux objets par index fort> ou par (x, y) fort>.

Voir la classe suivante et comprendre l'idée derrière elle. :) p>

Vous pouvez utiliser la classe suivante pour la manipulation de données en tant que tableau 2D ou matrice 1D. Voici le code pour cela que j'ai écrit et utilisez. P>

public class TestGrid
{
    public static final int     SIZE = 10;
    public static final Integer el1  = new Integer(2);
    public static final Integer el2  = new Integer(3);
    public static final Integer el3  = new Integer(3);

    public static void main(String[] args)
    {
        Grid<Integer> grid = new Grid<>(SIZE);
        assert grid.getCapacity() == SIZE*SIZE ;

        assert grid.idx(0,0) == 0 ;
        assert grid.idx(1,0) == 1 ;
        assert grid.idx(0,1) == 10;
        assert grid.idx(6,1) == 16; 
        assert grid.idx(9,9) == 99;

        grid.put(1, el1);
        assert grid.get(1) == el1 : grid.get(1);

        grid.put(0, 1, el2);
        assert grid.get(0,1) != el1 && el1 != el2 && grid.get(0,1) == el2;

        grid.put(15, el3);
        assert grid.get(5,1) == el3;
    }
}


0 commentaires

0
votes

Ceci est juste un pseudo code. Les lignes représentent la longueur de la matrice 2D et les colonnes représentent la longueur de l'élément du 1er élément dans la matrice xxx


0 commentaires

1
votes
package com.vikrant;

import java.util.Arrays;

public class TwoD {
    public static void main(String args[])
    {
        int a[][]=new int[4][3];
        int d[]={10,20,30,40,50,60,70,80,90,100,110,120};
        int count=0;
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<3;j++)
            {
                if(count==d.length) break;
                a[i][j]=d[count];
                count++;
            }}
        int j=0;
        for (int i = 0; i<4;i++)
        {
            for(j=0;j<3;j++)
        System.out.println(a[i][j]);

        }
    }}
THIS DOES THE WORK

1 commentaires

Bienvenue à cela. Merci pour votre réponse. Bien que les réponses de code seulement puissent fournir un code de travail, certains auraient peut-être des problèmes pour comprendre ce que le code fait. S'il vous plaît essayez d'élaborer les fragments de votre code.