Enums, вывод цветного текста
Создайте перечисление цветов для вывода цветного текста в консоль.
public enum Color {
DEFAULT("\033[0m"),
RED("\033[91m"),
YELLOW("\033[93m"),
GREEN("\033[92m");
private final String hue; // Хранение цвета
private Color(String hue) {
this.hue = hue;
}
public void out(Object o) {
System.out.println(hue + o); // Окрашивание текста
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter text: ");
String text = sc.next();
for (Color color : Color.values()) {
if (text.equalsIgnoreCase(color.name())) {
color.out(color.name() + ": " + text);
}
}
}
Если пользователь вводит название цвета, например, red, то текст окрашивается в красный цвет. Сейчас цикл срабатывает один раз, нужно, чтобы после ввода цвета, весь текст который будет введен пользователем выводился в этом цвете, пока не будет указан другой текст.
Как сделать чтоб цикл срабатывал не один раз и текст выводился в цвете пока не будет введен другой текст?
Ответы (1 шт):
Сделайте бесконечный цикл while, тогда программа не завершится до тех пор, пока ее кто-нибудь не прибьет:
public static void main(String[] args) {
while (true) {
...
}
}
Чтобы остановить такую программу в Intellij IDEA, нужно нажать на красный квадратик «стоп». Если работаете в терминале, то Ctrl + C.
Далее, чтобы весь текст выводить в цвете, заведем статическую переменную current, в которой будем хранить последний выбранный цвет. Вместо System.out везде будем использовать current.out:
class Main {
private static Color current = Color.DEFAULT;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
current.out("Enter text: ");
String text = scanner.next();
current = Color.of(text);
current.out(...);
}
}
}
Цикл по поиску цвета вынесен в статический метод of:
public enum Color {
...
public static Color of(String text) {
for (Color color : Color.values()) {
if (text.equalsIgnoreCase(color.name())) {
return color;
}
}
return Color.DEFAULT;
}
}
