2012-05-03 2 views
1

Уай эти петли:выход Странная петля - Java

while (x <= gridWidth) { 
      while (y <= gridHeight) { 
       System.out.println("X: " + x + ", Y: " + y); 
       y++; 
      } 
      x++; 
     } 

выводя это:

X: 0, Y: 0 
    X: 0, Y: 1 
    X: 0, Y: 2 
    X: 0, Y: 3 
    X: 0, Y: 4 
    X: 0, Y: 5 
    X: 0, Y: 6 
    X: 0, Y: 7 
    X: 0, Y: 8 
    X: 0, Y: 9 
    X: 0, Y: 10 
    X: 0, Y: 11 
    X: 0, Y: 12 
    X: 0, Y: 13 
    X: 0, Y: 14 
    X: 0, Y: 15 
    X: 0, Y: 16 
    X: 0, Y: 17 
    X: 0, Y: 18 
    X: 0, Y: 19 
    X: 0, Y: 20 
    X: 0, Y: 21 
    X: 0, Y: 22 
    X: 0, Y: 23 
    X: 0, Y: 24 
    X: 0, Y: 25 
    X: 0, Y: 26 
    X: 0, Y: 27 
    X: 0, Y: 28 
    X: 0, Y: 29 
    X: 0, Y: 30 
    X: 0, Y: 31 
    X: 0, Y: 32 
    X: 0, Y: 33 
    X: 0, Y: 34 
    X: 0, Y: 35 
    X: 0, Y: 36 
    X: 0, Y: 37 
    X: 0, Y: 38 
    X: 0, Y: 39 
    X: 0, Y: 40 
    X: 0, Y: 41 
    X: 0, Y: 42 
    X: 0, Y: 43 
    X: 0, Y: 44 
    X: 0, Y: 45 
    X: 0, Y: 46 
    X: 0, Y: 47 
    X: 0, Y: 48 
    X: 0, Y: 49 
    X: 0, Y: 50 

?

Я очень уверен, что gridWidth = 50, потому что я распечатал его.

+7

Это нормальное поведение, если gridHeight = 50, чего вы ожидали? –

ответ

9

Вам необходимо сбросить y до нуля до начала вложенного цикла. В противном случае внешний цикл будет выполняться 50 раз, но последние 49 раз внутренний цикл не будет выполняться вообще, потому что y уже выше gridHeight.

+0

Я могу получить anwer за 10 минут ... – 11684

+4

и цикл 'for' идеально подходят для этого:' for (y = 0; y <= gridHeight; y ++) '. Если после цикла вам не понадобится значение 'y', вы даже можете переместить объявление в' for': 'for (int y = 0 ...'). – yshavit

+1

@dasblinkenlight не видел вашего ответа, перед публикацией – bluesman

0

Вы не повторно инициализирует у каждой петли

while (x <= gridWidth) { 
     y = 0; 
     while (y <= gridHeight) { 
      System.out.println("X: " + x + ", Y: " + y); 
      y++; 
     } 
     x++; 
    } 
0
int y=0,x=0; 
while (x <= gridWidth) { 
    while (y <= gridHeight) { 
    System.out.println("X: " + x + ", Y: " + y); 
    y++; 
    } 
x++; 
y=0; 
} 
0
final int gridWidth = 50, gridHeight = 50; 

for(int x = 0; x <= gridWidth; x++) 
    for(int y = 0; y <= gridHeight; y++) 
    System.out.println("X: " + x + ", Y: " + y); 
2

Как Joshua Bloch наводит на мысль в его книге Effective Java, использовать для конструкции вместо время, когда вы можете. Является менее подверженным ошибкам, более кратким, и на самом деле это, вероятно, предотвратило бы вашу ошибку.

for (int x=0;x <= gridWidth;x++) 
    for (int y=0;y <= gridHeight;y++) 
     System.out.println("X: " + x + ", Y: " + y); 
Смежные вопросы