Сгенерировать пять случайных цветов без создания 15 рандомизированных переменных

#java #random #colors

#java #Случайный #Цвет

Вопрос:

Я создаю очень начинающую Java-программу, которая создает пять панелей случайного цвета и случайного размера (каждая панель меньше следующей).

Проблема:

Пока моя программа работает, мне приходилось вводить новую переменную для всего. Для пяти панелей по 3 цвета в каждой (R, G, B) мне пришлось создать 15 переменных. Нет ли способа вызвать random внутри (R, G, B) вместо того, чтобы создавать так много переменных?

Вот выдержка из моего кода, в которой рассказывается о том, как цвет рандомизируется на каждой панели:

 //Random Color Maker 1
Random rand = new Random();
int a = rand.nextInt(255);
int b = rand.nextInt(255);
int c = rand.nextInt(255);
    int d = rand.nextInt(255);
    int e = rand.nextInt(255);
    int f = rand.nextInt(255);
        int g = rand.nextInt(255);
        int h = rand.nextInt(255);
        int i = rand.nextInt(255);
            int j = rand.nextInt(255);
            int k = rand.nextInt(255);
            int l = rand.nextInt(255);
                int m = rand.nextInt(255);
                int n = rand.nextInt(255);
                int o = rand.nextInt(255);
Color color1 = new Color(a, b, c);
    Color color2 = new Color(d, e, f);
        Color color3 = new Color(g, h, i);
            Color color4 = new Color(j, k, l);
                Color color5 = new Color(m, n, o);

//Panel 1
JPanel Panel1 = new JPanel ();
Panel1.setBackground (color1);
Panel1.setPreferredSize (new Dimension (rand1));
JLabel label1 = new JLabel ("1");
Panel1.add(label1);

//Panel 2        
JPanel Panel2 = new JPanel ();
Panel2.setBackground (color2);
Panel2.setPreferredSize (new Dimension (rand2));
JLabel label2 = new JLabel ("2");
Panel2.add(label2);
Panel2.add(Panel1);
  

Комментарии:

1. Пожалуйста, пожалуйста, посмотрите на loops

2. Вы что-нибудь повторяете ? Какая языковая конструкция помогает нам повторять?

3. По крайней мере, это довольно понятный отступ.

4. Поздравляем, вы только что осознали важность цикла и функции — двух очень важных понятий в программировании.

5. Также обратите внимание, что когда у вас есть такие имена, как Panel1 , Panel2 , и т.д., эти массивы строго указаны.

Ответ №1:

Вы можете ввести метод

 Random rand = new Random();

private Color randomColor() {
  return new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255));
}

public void yourMethod() {
  //Panel 1
  JPanel Panel1 = new JPanel ();
  Panel1.setBackground (randomColor());
  // ...
}
  

Комментарии:

1. Несколько замечаний о форматировании: 1. Не используйте заглавные Panel1 буквы. 2. Сделайте отступ в четыре пробела. 3. Не ставьте пробел между именем метода и его аргументами.

2. Вы правы, скопировали две строки из исходного кода.

3. Спасибо за это. Они не научили нас ничему из этого, поэтому я удивлен, что они ожидают, что мы решим подобную проблему с несколькими панелями.

Ответ №2:

Еще одна вещь, которую следует учитывать, — это использование массива для хранения всех этих цветов. Одна из реализаций будет выглядеть следующим образом (с использованием метода RandomColor() от Udo):

 int[] myArray = new int[15];

for (int i = 0; i < 15; i  ) {
    int[i] = randomColor();
}
  

Кроме того, я думаю, вы хотите сделать:

rand.nextInt(256) , поскольку nextInt(number) дает вам случайное целое число между 0 (включительно) и числом (исключительным). Итак, чтобы убедиться, что 255 является возможным значением, вам нужно будет выполнить 255 1 = 256.

Комментарии:

1. Спасибо, я забыл, что диапазон начинается с 0.