1

同じ配列内の前の要素を参照する配列を使用して、次の値を決定しました。これは、ポリゴンを描画するときに位置の相対値を取得できるようにするためです。構文エラーは報告されていませんが、この例で使用している三角形は、表示されていないか、存在していません。

この例では、ウィンドウの端や他の三角形に関係なく、ウィンドウの上半分に小さな黒い三角形をランダムに散らばらせたいと思います。以下は、私が達成しようとしているものの例を含むコードですが、自己参照配列を使用していません (私はこれを BlueJ で書き、BlueJ 以外では何も書きませんでした。継続的な書き方がわかりません)。 // の後に、2 つのクラスのそれぞれが始まる場所を書きました。

//ファーストクラス

import javax.swing.*;

public class patterns {
    public static void main(String[] args) {
        JFrame f = new JFrame("Example");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        example p = new example();
        f.add(p);
        f.setSize(400,400);
        f.setVisible(true);
    }
}

//次の授業

     import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color;
public class example extends JPanel{
    public void paintComponent (Graphics g){
        super.paintComponent(g);
        this.setBackground(Color.WHITE);
        //The following is the part of the code that doesn't work.
        g.setColor(Color.BLACK);
        int x=0;//this x is used for the following while loop
        int[] xC = new int[3];//these are the x coordinates of the random triangles
        int[] yC = new int[3];//these are the y coordinates of the random triangles
        while(x<14){//this while loop is used to make many triangles
            xC[0]= (int)Math.random()*400;
            xC[1]= xC[0]+(int)Math.random()*20;
            xC[2]= xC[1]+(int)Math.random()*4;
            yC[0]= (int)Math.random()*200;
            yC[1]= yC[0]-(int)Math.random()*10;
            yC[2]= yC[0]-(int)Math.random()*3;
            g.fillPolygon(xC,yC,3);//I changed this to fillPolygon
            x++;//this is so the loop will eventually end
        }
        //the following is the manual part that does work.
        int[] xCe = new int[3];//this is the array of x coordinates for the triangle
        xCe[0]= 200;
        xCe[1]= 210;
        xCe[2]= 213;
        int[] yCe = new int[3];//this is the array of y coordinates for the triangle
        yCe[0]= 300;
        yCe[1]= 295;
        yCe[2]= 299;
        g.fillPolygon(xCe,yCe,3);//this polygon appears properly
        //everything after this is just to help explain after compiling
        g.drawString("There should be a whole bunch of little triangles that look",20,320);
        g.drawString("sort of like this one, but on the top half of this window.", 40,340);
        g.drawLine(170,270,200,290);
        g.drawLine(194,289,200,290);
        g.drawLine(197,285,200,290);
        g.drawString("this one",140,260);
    }
}

それらが見えなくなる原因は何ですか?それらが見えるようにしたいです。何が間違っているのかわかりません。それは自己参照配列ですか?それは fillPolygon() では許可されていませんか?

4

1 に答える 1

0

次のように配列の値を初期化します。

xC[0]= (int)Math.random()*400;

ただし、キャストは乗算の前に発生するため、返される値Math.random()(1 未満) は int にキャストされ、 になる0*400ため、配列のすべてのインデックスに 0 が格納されます。

これを修正するには、乗算を括弧で囲み、次のようにします。

xC[0]= (int)(Math.random()*400);

また、ループは同じ三角形を 14 回描画しているだけであるため、異なる三角形の束はまだ表示されないことに注意してください。これを修正するには、次のように、三角形を生成するために使用するコードをループ内に配置します。

for (int i = 0; i < 14; i++) {
    int[] xC = new int[3];
    xC[0] = (int) (Math.random() * 400);
    xC[1] = xC[0] + (int) (Math.random() * 200);
    xC[2] = xC[1] + (int) (Math.random() * 4);
    int[] yC = new int[3];
    yC[0] = (int) (Math.random() * 200);
    yC[1] = yC[0] - (int) (Math.random() * 10);
    yC[2] = yC[0] - (int) (Math.random() * 3);
    g.setColor(Color.BLACK);
    g.fillPolygon(xC,yC,3);
}

また、三角形のサイズをより均一にすることをお勧めします (< 3 および 4 の辺は小さいです)。おそらく、低い数値と高い数値の間のランダムな値 (10 から 20 など) を生成します。そしてjava.util.Random、あなたがそれをしている間、多分クラスを調べてください。

于 2013-09-12T03:57:39.787 に答える