0

ArrayList を使用している間、for ループの反復ごとにランダムな色をリセットして再適用する方法がわかりません。XLeft の位置が変更されるたびに、ランダムな色をリセットして適用しようとしています。これは私が使用している 1 つのクラスの一部にすぎず、私の getMax() は Scanner 入力によって定義されていました。助言がありますか?

import java.util.ArrayList;
import java.util.Random;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;

public class BarChart {

private int width, height;
private ArrayList<Double> values = new ArrayList<Double>();
private Random generator = new Random();
int red = generator.nextInt(255);
int green = generator.nextInt(255);
int blue = generator.nextInt(255);
private Color randomColor = new Color(red, green, blue);


public BarChart(int aWidth, int aHeight) {

    width = aWidth;
    height = aHeight;

}

public void add(double inputValues) {
    values.add(inputValues);
}

public double getMax() {

    double max = values.get(0);

    for (int i = 1; i < values.size(); i++) {
        if ((values.get(i)) > max)
            max = values.get(i);

    }
    return max;
}

public void draw(Graphics2D g2) {

    int xLeft = 0;
    double barWidth = width / values.size();

    for (int i = 0; i < values.size(); i++) {

        double barHeight = (values.get(i) / getMax()) * height;
        Rectangle bar = new Rectangle(xLeft, height - ((int) barHeight),
                (int) barWidth, (int) barHeight);
        g2.setColor(randomColor);
        g2.fill(bar);
        xLeft = (int) (xLeft + barWidth);
        xLeft++;

    }
}

}

4

1 に答える 1

0

ループの前に、ランダムな色を一度定義しているようです。これは、ループを実行すると、毎回同じ「ランダム カラー」が使用されることを意味します。各反復で実行されるように、ランダム カラーの定義をループに移動する必要があります。

編集(コメントに基づく):

public void draw(Graphics2D g2) {

int xLeft = 0;
double barWidth = width / values.size();

for (int i = 0; i < values.size(); i++) {

    double barHeight = (values.get(i) / getMax()) * height;
    Rectangle bar = new Rectangle(xLeft, height - ((int) barHeight),
            (int) barWidth, (int) barHeight);

    red = generator.nextInt(255); 
    green = generator.nextInt(255);
    blue = generator.nextInt(255);
    randomColor = new Color(red, green, blue);

    g2.setColor(randomColor);
    g2.fill(bar);
    xLeft = (int) (xLeft + barWidth);
    xLeft++;

}
于 2013-04-15T21:50:45.073 に答える