2013-08-01 16 views
5

Sto cercando di completare un incarico (così punto nella direzione generale sarebbe di grande aiuto) all'interno del quale ho da (in ordine):Utilizzando un ciclo for per la stampa e la matrice bidimensionale in Java

  1. dichiarare un array di stringhe 2d,
  2. valori Assegnare alla matrice di due persone e il loro drink preferito
  3. uscita utilizzando un ciclo for

public class doublearray { 
    public static void main(String[] args){ 
     String Preferences [] [] = new String [2][2]; 
     Preferences [0][0]= "Tom, Coke"; 
     Preferences [1][1]= "John, Pepsi"; 

     for (int i=0; i<2; i++){ 
      for (int j =0; j<3; j++){ 
       System.out.print(Preferences[i][j]); 
      } 
     } 
    } 
} 

ricevo questo messaggio di errore

Tom, CokenullException in discussione java.lang.ArrayIndexOutOfBoundsException "principale": 2 a doublearray.main (doublearray.java:15)

Ora, Capisco che ", Tom, Coca Cola" sono stati assegnati solo a UNO [0], motivo per cui appare null, ma non ho idea di come rimediare a ciò o farlo stampare correttamente.

Qualsiasi aiuto sarebbe più apprezzato, sono stato bloccato su questo per circa un'ora. Grazie a tutti.

+0

Il ciclo interno consentirà a j di essere 2 che è fuori dai limiti dell'array interno. In altre parole, Preferenze [0] [2] è fuori dai limiti dell'array perché la lunghezza è 2. Il ciclo interno dovrebbe essere j <2, non 3. O più attendibilmente Preference [i] .length. –

+0

e le risposte iniziano ... –

+0

Perché 'i <2' e' j <3'? – Stobor

risposta

2

Si può wan t qualcosa di simile:

Preferences [0][0]="Tom"; 
Preferences [0][1]="Coke"; 
Preferences [1][0]="John"; 
Preferences [1][1]="Pepsi"; 

Saprete che Preferenze [0] è di circa Tom
Saprete che le preferenze [1] è di circa John

E una volta che hai esso, le colonne saranno [0] => "nome" [1] => "drink"

[0][1] will give you Tom[0] s drink[1] [Coke] for example. 
[0][0] will give you Tom[0] s name[0] [Tom] for example. 
[1][1] will give you John[1] s drink[1] [Pepsi] for example. 
[1][0] will give you John[1] s name[0] [John] for example. 
+0

Grazie, questo mi ha chiarito molto! –

1
for (int i=0; i<2; i++){ 
    //size for inner loop was 3 but should be 2  
    for (int j =0; j<2; j++){ 

    System.out.print(Preferences[i][j]);} 
} 
} 

Per dimensione arbitraria

for (int i=0; i<Preferences.length; i++){ 
     for (int j =0; j<Preferences[i].length; j++){ 

     System.out.print(Preferences[i][j]);} 
    } 
    } 
0

Guardate il vostro secondo per-loop. Considerare di avere spazio solo per 2 Valori per dimensione finale

1

Nel secondo ciclo j dovrebbe anche j<2 invece di j<3

1
for (int j =0; j<3; j++){ 

necessità di essere

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

non hai fatto la matrice grande abbastanza per j per essere == 2 quindi è out of bounds

1

Si mple

for (int i=0; i<2; i++){ 
     for (int j =0; j<2; j++){ 

    System.out.print(Preferences[i][j]);} 
} 
+0

Grazie mille, questo mi ha liberato dell'errore ma il ritorno è ora Tom, Cokenullnull, John Pepsi, –

1

aver definito la matrice 2D come:

new String [2][2]; 

e il ciclo seeems essere tring per andare a prendere gli elementi come

new String [0][3]; e così via a causa del vostro interno per ciclo :

Inizio dell'indice di matrice fuori limite. Potrebbe essere necessario modificare il ciclo for interno a

for (int j =0; j<2; j++) 

e provare.

10

Prova questo, è il modo corretto per attraversare un array bidimensionale di dimensione arbitraria:

for (int i = 0; i < Preferences.length; i++) { 
    for (int j = 0; j < Preferences[i].length; j++) { 
     System.out.print(Preferences[i][j]); 
    } 
} 
0

Come si può prendere il vostro j 0-2 dal tuo lunghezza dell'array è 2 e si avvia il ciclo da 0.

cambiamento for (int j = 0; j < 3; j ++) per for (int j = 0; j < 2; j ++)

Problemi correlati