Как только вы вводите строку в выражение +
, вы делаете конкатенацию строк только для оставшейся части выражения.
Первый color + 1
интерпретируется как математическое сложение, поскольку строки не имеют встречается в выражении в этой точке.
Это:
outgoingMessages.add(color + 1 + "\t" + color + 1 + "\t" + color);
фактически идентично этому:
outgoingMessages.add(
new StringBuilder(String.valueOf(color + 1)) // mathematical addition
.append("\t")
.append(String.valueOf(color))
.append(String.valueOf(1))
.append("\t")
.append(String.valueOf(color))
.toString());
Решение состоит в том, чтобы выделить математическое выражение, так что это интерпретируется как математика:
outgoingMessages.add(color + 1 + "\t" + (color + 1) + "\t" + color);
Для ясности я лично заключил бы в скобки оба математических выражения:
outgoingMessages.add((color + 1) + "\t" + (color + 1) + "\t" + color);
Конечно, color
- это одна переменная, так что вы печать трех чисел, которые основаны на одном значении. Переменная никоим образом не «привязана» к каким-либо предыдущим присваиваниям, которые она может добавить; переменная устанавливается только в тот момент, когда в программе встречается присвоение.
Если вы хотите три случайных числа, вам нужно выполнить три операции со случайными числами и три назначения:
int color1 = rnd.nextInt(254) + 1;
int color2 = rnd.nextInt(254) + 1;
int color3 = rnd.nextInt(254) + 1;
outgoingMessages.add((color1 + 1) + "\t" + (color2 + 1) + "\t" + color3);