2017-01-06 2 views
4

je fais un calcul en Java avec des tableaux voici le code, j'ai 3 tableaux:calculs avec des tableaux avec une boucle pour en java

int pag_size; 
int pag_array_size=pag_size*4; 


int[] pag = new int [pag_size]; 
int[] marc = {5, 6, 1, 2}; 
int[] calc1 = new int[pag_array_size]; 

et je suis en ajoutant les valeurs à pag[]; avec pour boucle

for(int i=0;i<pag.length;i++){ 
    pag[i]=i; 
} 

Je sauve les calculs dans calc1

dans ce cas pag_size=4; si pag_array_size=16; donc j'ai besoin 16 calcul

et voici les calculs effectués manuellement:

calc1[0] = marc[0] * pag_size+ pag[0]; 
calc1[1] = marc[0] * pag_size + pag[1]; 
calc1[2] = marc[0] * pag_size + pag[2]; 
calc1[3] = marc[0] * pag_size + pag[3]; 

calc1[4] = marc[1] * pag_size + pag[0]; 
calc1[5] = marc[1] * pag_size + pag[1]; 
calc1[6] = marc[1] * pag_size + pag[2]; 
calc1[7] = marc[1] * pag_size + pag[3]; 

calc1[8] = marc[2] * pag_size + pag[0]; 
calc1[9] = marc[2] * pag_size+ pag[1]; 
calc1[10] = marc[2] * pag_size + pag[2]; 
calc1[11] = marc[2] * pag_size + pag[3]; 

calc1[12] = marc[3] * pag_size + pag[0]; 
calc1[13] = marc[3] * pag_size + pag[1]; 
calc1[14] = marc[3] * pag_size + pag[2]; 
calc1[15] = marc[3] * pag_size + pag[3]; 

et la sortie des calculs est

20 21 22 23 24 25 26 27 4 5 6 7 8 9 10 11 

Comment puis-je faire les calculs avec un for ou une boucle do while ou avec tout autre méthode?

Répondre

2

Essayez ceci:

int pag_size = 4; 
    int pag_array_size=pag_size*4; 


    int[] pag = new int [pag_size]; 
    int[] marc = {5, 6, 1, 2}; 
    int[] calc1 = new int[pag_array_size]; 

    for(int i=0;i<pag.length;i++){ 
      pag[i]=i; 
    } 

    for (int i = 0 ; i < pag_array_size; i++){ 
     calc1[i] = marc[i/pag_size]* pag_size + pag[i%pag_size]; 
     System.out.println(calc1[i]); 
    } 

élégant et simple.

Vous ne pouvez pas utiliser deux pour les boucles. Au lieu de cela, vous devrez utiliser '%' et &.

+0

@Printam Banerjee Merci cela m'a beaucoup aidé – BlazePage001

0

Si je suis ce modèle:

calc1[0] = marc[0] * pag_size+ pag[0]; 
    calc1[1] = marc[0] * pag_size + pag[1]; 
    calc1[2] = marc[0] * pag_size + pag[2]; 
    calc1[3] = marc[0] * pag_size + pag[3]; 

    calc1[4] = marc[1] * pag_size + pag[0]; 
    calc1[5] = marc[1] * pag_size + pag[1]; 
    calc1[6] = marc[1] * pag_size + pag[2]; 
    calc1[7] = marc[1] * pag_size + pag[3]; 

Vous pouvez faire une boucle simple et utiliser un modulo pour Reinit l'indice pour les tableaux de marc et pag lorsque vous avez rempli une page:

int pagIndex = 0; 
int marcIndex = 0; 
for (int i = 0; i < calc1.length; i++){ 
    calc1[i] = marc[marcIndex] * pag_size + pag[pagIndex++]; 

    if (i % pag_size == 0){ 
    pagIndex = 0; 
    marcIndex++; 
    } 
} 
0

Cela peut être fait avec emboîtés for-loop s comme ceci:

int calcAccum = 0; 
for(int i=0;i<marc.length;i++){ 
    for(int j=0;j<4;j++){ 
     calc1[j+calcAccum] = marc[i] * pag_size + pag[j]; 
    } 
    calcAccum+=4; 
} 
+0

ok mais int la boucle pourrait-il fonctionner comme ça @ CraighR8806? 'pour (int j = 0; j BlazePage001

+0

@ BlazePage001 Pouvez-vous clarifier ce que vous voulez dire? – CraigR8806

+0

dans la seconde pour boucle pourrais-je utiliser la valeur de 'pag_size' pour déterminer les nombreuses fois que le pour répéter? – BlazePage001

0

Vous devez utiliser pour la boucle en boucle son e est une par exemple (pseudocode)
for(i in marc){ for(j in pag){ //your code goes here } }

0

Essayez ceci:

for (int i = 0; i < pag.length; i++) 
    for (int j = 0; j < marc.length; j++) 
     calc1[i * pag.length + j] = marc[i] * pag.length + pag[j]; 

Très simple :)

0

Vous pouvez utiliser les flux:

int pag_size = 4; 

int[] pag = IntStream.range(0, pag_size).toArray(); 
int[] marc = {5, 6, 1, 2};  

int[] calc1 = Arrays.stream(marc) 
    .map(i -> i * pag_size) 
    .flatMap(i -> Arrays.stream(pag).map(i2 -> i + i2)) 
    .toArray(); 

System.out.println(Arrays.toString(calc1)); 

Sortie:

[20, 21, 22, 23, 24, 25, 26, 27, 4, 5, 6, 7, 8, 9, 10, 11]