2016-04-18 24 views
1

交互の色(例えば、黒、白、黒、白)の縦線で矩形を描くループを作成する必要があります。誰が私にこれがどのように行われたか教えてくれますか?ループを使用して四角形を描く方法は?

私は数多くの方法を試しましたが、ループがうまく動作しないようです。

for (int x = 0; x>10;x++){ 
       int y= 180; 
       graph2D.drawRect(170, y, 20, 50); 
       y = y + 45; 

これは私が持っているもので、何らかの理由で長方形を描かず、別の色にすることができません。

+0

これは機能していないため、おそらくより多くのコードを参照する必要があります。あなたはループなしで単一の矩形を描くことができますか? –

+0

開始するには、ループに入るたびに「y」を再初期化するので、四角形が上に描画されます。ループの前に 'int y = 180;'を動かして、あなたが得るものを見てください。そこから色や残りの部分を扱うことができます – Windle

+0

'String color = x%2 == 0? "黒": "白"。色が変わったようなもの。 –

答えて

4

:ループのすべての偶数y%2 == 0は1色、(また、上記のコードで言及)、そうでなければ第2のいずれかになります。

お客様のfor loopは、x < 10の代わりにx > 10であるため、繰り返しは実行されません。

変更最初の行から:

for (int x = 0; x>10;x++){ 

へ:あなたのループが開始しない一度よう

for (int x = 0; x < 10; x++) { 

はまた、あなたがy各反復180をリセットし、四角形のすべてが描画されますお互いの上にループの外にyを宣言するか、xを使用して矩形の位置を計算します。

のいずれかを次のように:

int y = 180; 
for (int x = 0; x < 10; x++) { 
    graph2D.drawRect(170, y, 20, 50); 
    y = y + 45; 
} 

またはこのような:

for (int x = 0; x < 10; x++) { 
    graph2D.drawRect(170, (x * 45) + 180, 20, 50); 
} 

上記数学(x * 45) + 180秒となり、最初の矩形は(x * 45) + 180 = 0 + 180 = 180になることを言っての、超簡単な方法であります(x * 45) + 180 = 45 + 180 = 225などと続きます。

矩形の色を変更するには、Colorsのリストまたは配列を作成し、各繰り返しでリストから別のColorを使用する必要があります。もちろん

//Make the list 
Color[] colors = {Color.black, Color.blue, Color.cyan, Color.darkGray, 
        Color.green, Color.lightGray, Color.magenta, Color.magenta, 
        Color.orange, Color.pink, Color.red, Color.white, Color.yellow}; 

//Draw each rectangle 
for (int x = 0; x < 10; x++) { 

    //Change the color 
    g.setColor(colors[x]); 

    //Draw the rectangle 
    graph2D.drawRect(170, (x * 45) + 180, 20, 50); 
} 

あなたは色がランダムになりたい場合は、Randomクラスを使用して、0とあなたのcolors配列の長さの間の乱数を生成するに見ることができます。また、colors配列のインデックスとしてxを使用していることに注意してください。ループがxを配列の色数よりも増やすと、ArrayIndexOutOfBoundsExceptionが発生します。

私はまたあなたのインスタンスをGraphicsと名付けたとして、ほとんどの場合そのように行われているので、gとします。

+0

Matthewありがとう、色を変える輪郭だけではなく、四角形がループ内に埋め込まれるように、どうすればいいですか?私はそれのための配列を使用することを考えなかった –

+0

長方形を 'drawRect'ではなく' fillRect'メソッドを使って単純にする問題はありません。それは 'drawRect'と同じパラメータを取るので、名前を変更するだけです。 –

2

なぜxの代わりにyという変数を使用してループしているのですか?長方形を描きながら

@Override 
public void paint(Graphics graph2D) { 
    for (int y=0; y<10; y++) { 
     int height = 50; 
     if (y%2==0) { 
      graph2D.setColor(Color.white); 
     } else { 
      graph2D.setColor(Color.black); 
     } 
     graph2D.fillRect(170, 180 + y*height, 20, 50); 
    } 
} 

また違いを気に:

  • .drawRect(..)は、矩形の境界線を描画します。
  • .fillRect(..)は、矩形を描画します。場合

あなたはすべてのループで色を変更し、blackwhite色を切り替えたいです。あなたがここにいくつかの問題を持っている

if (y%2==0) { 
    graph2D.setColor(Color.white); 
} else { 
    graph2D.setColor(Color.black); 
} 
+1

'static final int'は単に' int'よりやや優れているかもしれません - コンパイル時の定数であり、JVMに認識させない方が良いでしょう。 –

+0

@SándorMátyásMártonどこにいるのですか? –

+0

@MatthewCliattそれは 'height'についての副作用でしたが、ループ変数はもちろんコンパイル時定数ではありません:) –

関連する問題