Задача "Светофор"

Дан светофор. Он горит 3 цветами (r - red, y - yellow, g - green). Цвета меняются по очереди R->Y->G->Y->R->Y->G->Y->..... В программу вводиться 4 целых числа: r, y, g - сколько горит каждый цвет в секундах и s - количество секунд прошедших с 0 секунды. В 0 секунду загорается красный цвет.


green если задано r = y = g = 1, s = 5, то:

в 0 секунду горит red

в 1 - yellow

в 2 - green

в 3 - yellow

в 4 - red

в 5 - yellow

Программа должна вывести цвет (red, yellow, green), который будет гореть в момент s.

Формат входных данных: На единственной строке задано четыре целых числа: r, y, g, s разделенные пробелом. 1 <= r, y, g <= 10^9, r + y + g <= 10^9, 0 <= s <= 10^9.

Формат выходных данных: Единственное слово: red, yellow или green.

Примеры:

Входные данные:  1 1 1 5 | yellow
Выходные данные: 2 2 2 5 | green
import java.util.Scanner;

public class Task21 {
    public static void main (String[]args){
        Scanner scanner = new Scanner(System.in); 
        int r = scanner.nextInt(); //вводимое значение для красного цвета(сколько времение горит).
        int y = scanner.nextInt(); //вводимое значение для желтого цвета(сколько времение горит).
        int g = scanner.nextInt(); //вводимое значение для зелёного цвета(сколько времение горит).
        int s = scanner.nextInt(); //колличество секунд,прошедших с нулевой(0) секунды.;
        int sum = s%(r+y+g);
        if (s >= 0 && s <= r) System.out.println("green");
        if (s >= r && s <= y) System.out.println("yellow");
        if (s >= y && s <= g) System.out.println("red");
    }
}

Нужно как-то дописать код,что бы он работал.Хэлп плиз) Только начал изучать Java.


Ответы (1 шт):

Автор решения: Agzam4
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); 
        String[] values = scanner.nextLine().split(" "); //Считываем строку(nextLine()) и разделяем по пробелам (split(" "))
        scanner.close(); // Закрываем Scanner
        // Переводим значения введенные с клавиатуры в int, а они были String:
        int r = toInt(values[0]); 
        int y = toInt(values[1]);
        int g = toInt(values[2]);
        int s = toInt(values[3]);

        int sum = s%(r+y+g+y);
        if (sum < r) { // Если сумма меньше, чем время горения красного (R)
            System.out.println("red");
        } else if (sum < r+y) { // Если сумма меньше, чем время горения красного и желтого (R+Y), тк они друг за другом горят
            System.out.println("yellow");
        } else if (sum < r+y+g) { // Если сумма меньше, чем время горения красного, желтого и зеленого (R+Y+G), тк они друг за другом горят
            System.out.println("green");
        } else { // Если никакое условие из кода выше(где "if"), не выполнилось выполняем этот кусок
            System.out.println("yellow");
        }
        // Дальше "if" нет, тк мы используем "%"(остаток от деления) 
    }
    
    private static int toInt(String s) 
        try { // Пытаемся конвертировать String в int
            return Integer.valueOf(s);
        } catch (NumberFormatException e) { // Если не получается (например ты ввел не число, а букву), то возвращаем 0
            return 0;
        }
    }
→ Ссылка