2012-01-23 27 views
3

私は処理を学んでいます(視覚芸術のためのJavaベースの言語を知らない人のために)、そして入れ子になったforループで奇妙な問題を見つけました。 これは、ランダムな点数を生成し、それらをすべて接続する単純なプログラムです。入れ子にされたjavaループのスコープの問題

size(1280, 1050); 
background(227, 199, 147); 
smooth(); 
stroke(255); 
strokeWeight(2); 

int points = int(random(30)) + 2; 
int[][] Points = new int[points][2]; 

for (int i = 0; i < points; i++) 
{ 
     Points[i][0] = int(random(1280)); 
    Points[i][1] = int(random(1050)); 
} 

for (int i = 0; i + 1 < points; i++) 
{ 
    for (int L = i+1; L < points; L++); 
    { 
    line(Points[i][0], Points[i][1], Points[L][0], Points[L][1]); 
    } 
} 

これを実行すると、「Lという名前のファイルが見つかりません」というエラーが表示されます。何か案は?

+0

これはあなたの問題とは無関係ですが、後であなたをつまずかせるかもしれません。純粋なJavaでは、大文字で始まる変数を持つべきではありません。したがってこの例では、配列 'Points'とループカウンタ 'L'は両方とも無効になります。彼らは 'ポイント'と 'l'でなければなりません。そして、原則として、大文字で異なる2つの変数名を持つべきではありません(つまり、同じプログラム内で変数として "Points"と "Points"の両方を持つべきではありません)。これは、追跡が困難なバグを生成することがほぼ保証されています。 – David

+0

実際、コンパイラはその旨の警告を出すべきです。それらの警告に注意してください、彼らはあなたの人生を楽にします。 –

答えて

8

ネストされたループの後にセミコロンがあります。これにより構文的に正しい空ループが作成され、宣言されていない変数Lを参照するブロックが続きます。注意点として、それは典型的にijで開始、小文字と名前ループ変数に典型的である

km、および等々。大文字のIとの類似性により、小文字のlはスキップされることがよくあります。

+0

うわー、私はそれを気付かなかったと信じられない、ありがとう! – shaftoes

1

あなたは、forループ宣言の後にセミコロンを持っている:

for (int L = i+1; L < points; L++); 
+0

あまりにも遅い!しかたがない。少なくとも、大文字で始まる変数名(この場合は*です*)を使用するためにJavaを書くときには、通常、悪い形とみなされます。 – Russell

関連する問題