如何从Java中的颜色数组中随机选择一种颜色?

问题描述:

我正在第一次学习Java和编程。我正在使用BlueJ环境。如何从Java中的颜色数组中随机选择一种颜色?

我在写程序来绘制多边形。我想在每一行绘制后改变颜色。要做到这一点,我想我会创建一个颜色数组,然后使用伪随机数生成器来生成一个值,该值将被用作从数组中获取颜色的索引。我已经包含了来自构造函数方法的一段代码,正如我所知道的,我需要在构造函数中创建数组才能工作。

应该指出,我已经导入了java.awt.Color和java.util.Random。我还包括了

private Color[] colors; 

作为一个字段。

public PictureMaker() 
{ 
    world = new TurtleWorld(500, 500, "Picture Maker"); 
    fred = new Turtle(); 
    //Allocate the size of the array 
    colors = new Color[7]; 

    //Initialize the values of the array 
    colors[0] = new Color(Color.red); 
    colors[1] = new Color(Color.blue); 
    colors[2] = new Color(Color.yellow); 
    colors[3] = new Color(Color.green); 
    colors[4] = new Color(Color.black); 
    colors[5] = new Color(Color.pink); 
    colors[6] = new Color(Color.orange); 
} 

以下是将调用绘制多边形的实际方法的代码。

/** 
* This method takes sides (int) as input and draws a polygon with that number of sides. 
*/ 
public void drawPolygon(int sides) 
{ 
    world.dropIn(fred); 
    fred.penDown(); 
    int angle = 360/sides; 
    int linesDrawn = 0; 


    while(linesDrawn < sides) 
    { 
     Random r = new Random(); 
     int minColor = 0; 
     int maxColor = 10; 
     int R = r.nextInt(maxColor-minColor) + minColor; 
     fred.right(angle); 
     fred.forward(60); 
     linesDrawn += 1; 

    } 
} 

我还没有包括任何东西从数组中获取颜色,因为我无法让数组工作。

我收到一条错误消息Incompatible types: java.awt.Color cannot be converted to int

我不知道为什么它不起作用。

我希望这是有道理的。

请让我知道,如果你需要澄清,我是新使用本网站。

+1

您有什么问题? – brso05 2014-10-30 17:39:19

+1

请注意,您正在为* Javascript *创建片段,这与Java非常不同。 – 2014-10-30 17:41:24

+1

我发现一个问题就是蝙蝠,你正在生成1-10之间的数字,而你的数组只有7个元素... – brso05 2014-10-30 17:41:29

Color领域已经Color型的 - 你不需要调用构造函数Color。编译器抱怨,因为没有Color构造函数,它需要Color参数。我建议你使用更传统命名为大写的人,太 - 与用于简单数组初始化数组初始化:

colors = new Color[] 
{ 
    Color.RED, Color.BLUE, Color.YELLOW, Color.GREEN, 
    Color.BLACK, Color.PINK, Color.ORANGE 
}; 
+0

谢谢,这个伎俩。我仍然在上面的行上为数组分配内存。这仍然是必要的吗?或者我可以在分配内存的答案中的方括号中加上7? – JC2188 2014-10-30 19:06:48

+0

@ user2331411:你根本不需要7个 - 我提供的代码是* all *你需要的...它将分配一个数组,这个数组对于大括号内的元素来说是合适的大小。 – 2014-10-30 19:07:49

+0

另一个快速问题。为什么这必须在构造函数方法内完成,而不是drawPolygon()方法? – JC2188 2014-10-30 19:11:36

我觉得你的阵列应该是这样的

//Initialize the values of the array 
    colors[0] = Color.red; 
    colors[1] = Color.blue; 

等等......

你的阵列应该像这样:

Color[] colors = new Color[7]; 

    //Initialize the values of the array 
    colors[0] = Color.red; 
    colors[1] = Color.blue; 
    colors[2] = Color.yellow; 
    colors[3] = Color.green; 
    colors[4] = Color.black; 
    colors[5] = Color.pink; 
    colors[6] = Color.orange; 

没有构造对于单独的颜色,因此new Color未定义。

至于采摘随机:

Color c = colors[randInt(0, colors.length-1)]; 

其中randInt是这样的方法:

public static int randInt(int min, int max) { 
    Random rand = new Random(); 
    int randomNum = rand.nextInt((max - min) + 1) + min; 

    return randomNum; 
} 
+0

将'rand'作为一个全局变量,并且执行'Color c = colors [rand.nextInt(colors.length)]''是不是更容易? – Sizik 2014-10-30 18:01:36

+0

我不认为有任何增加困难。当然,像你说的那样做会更快,但是如果操作需要项目中其他地方的特定范围内的随机数,该方法只允许重用。 – 2014-10-30 18:06:05

+0

所以这基本上是将随机生成器抽象到它自己的方法中,然后调用它来为Color类型的变量c赋值。 – JC2188 2014-10-30 19:09:28