2013-08-01 8 views
5

staram się ukończyć zadanie (czyli punkt w ogólnym kierunku byłoby bardzo pomocne), w którym muszę się (w kolejności):za pomocą pętli for do wydrukowania i dwuwymiarowej tablicy w Javie

  1. zadeklarować 2d tablicy ciągów,
  2. przypisać wartości do tablicy dwóch osób i ich ulubiony napój
  3. Wyjście za pomocą pętli 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]); 
      } 
     } 
    } 
} 

I ten komunikat o błędzie

Tom, CokenullException w wątku "main" java.lang.ArrayIndexOutOfBoundsException: 2 na doublearray.main (doublearray.java:15)

Teraz Rozumiem, że ", Tom, Coke" zostały przypisane tylko do ONE [0], dlatego pojawia się wartość zerowa, ale nie mam pojęcia, jak temu zaradzić lub sprawić, aby drukowanie przebiegło pomyślnie.

Każda pomoc będzie najbardziej doceniona, utknąłem na tym przez około godzinę. Dziękuję Ci.

+0

Wewnętrzna pętla pozwoli j na 2, która znajduje się poza granicami wewnętrznej tablicy. Innymi słowy Preferencje [0] [2] są poza obszarem tablicy, ponieważ długość wynosi 2. Wewnętrzna pętla powinna być j <2, nie 3. Lub bardziej niezawodnie Preferencja [i] .length. –

+0

i zaczynają się odpowiedzi ...... –

+0

Dlaczego "i <2" i "j <3"? – Stobor

Odpowiedz

2

Możesz wan t coś takiego:

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

Będziesz wiedzieć, że Preferencje [0] jest o Tomie
Będziesz wiedzieć, że Preferencje [1] jest o Janie

A skoro masz to, kolumny będą: [0] => "nazwa" [1] => "pić"

[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

Dziękuję, to wyjaśniło mi to bardzo! –

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]);} 
} 
} 

Dla dowolnego rozmiaru

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

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

patrzeć na swój drugi dla pętli. Rozważyć masz tylko przestrzeń dla 2 wartości na końcowy wymiar

1

W drugiej pętli j powinien również j<2 zamiast j<3

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

musi być

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

Nie sprawiają, że duża tablica wystarczy, aby j było == 2, więc jest to 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

Bardzo Ci dziękuję, to spowodowało, że popełniłem błąd, ale powrót brzmi: Tom, Cokenullnull, John Pepsi, –

1

Zdefiniowano swoją tablicę 2D jak:

new String [2][2]; 

i pętla seeems być tring pobierać elementy, takie jak

new String [0][3]; i tak dalej ze względu na swoją wewnętrzną dla pętli :

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

Prowadzenie do indeksu tablicy poza granicami. Być może trzeba zmienić wewnętrzną pętlę for na

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

i spróbować.

10

Spróbuj tego, że jest to właściwy sposób przemierzać dwuwymiarową tablicę arbitralnej rozmiar:

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

Jak można zabrać j od 0 do 2 Ponieważ długość tablicy jest 2 i uruchomieniu pętli od 0.

zmiany for (int j = 0; j < 3; j ++) do for (int j = 0; j < 2; j ++)

Powiązane problemy