Задача на условный оператор if

Решаю сборник задач "1000 задач по программированию часть 1. М.Абрамян"(https://vk.com/doc137181225_441506453?hash=259564739f7712e1f3&dl=602b3757520f898ac8).

Не могу решить задачу "If27". Первая ветвь else if работает(т.е ввожу число, которое принадлежит соответствующему промежутку. Например х=2,75 принадлежит промежутку [2;3), после ввода показывает "1", все ок.). Но не работает 2-я ветвь, т.е если я допустим возьму число x=1.26, которое принадлежит [1;2), на экран не выводится "-1".

Решение:

public class If27 {
    public static void main(String[] args) {
        double x = Double.parseDouble(args[0]);
        int begin = Integer.parseInt(args[1]); 
        
        double r1 = 2*begin + (int) (Math.random());
        double r2 = 1 + 2*begin + (int) (Math.random());
        
        if (x < 0) {
            System.out.println("0");
        }
        else if (x >= r1 && x < r2) {
            System.out.println("1");
        }
        else if (x > r1 && x <= r2) {
            System.out.println("-1");
        }
    }
}

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

Автор решения: Алексей Шиманский

У вас условия почти эдентичны, за исключением равенства числа одному из r.

У вас и в первом и втором случае всегда число с запятой будет входить в промежуток обоих условий.

сравните:

x = 1.5
r1 = 1.1;
r2 = 2.1;
----------------
1.1 <= 1.5 < 2.1    
и
1.1 < 1.5 <= 2.1

вот если было бы так:

x = 1.1
r1 = 1.1;
r2 = 2.1;
----------------
1.1 <= 1.1 < 2.1    
и
1.1 < 1.1 <= 2.1

или

x = 2.1
r1 = 1.1;
r2 = 2.1;
----------------    
1.1 <= 2.1 < 2.1
и
1.1 < 2.1 <= 2.1

совсем другой разговор

→ Ссылка