#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.