Java, Сравнивая минуты в операторе if - не получая желаемых результатов - PullRequest
0 голосов
/ 08 июня 2018

Возможно, на данный момент это просто мое душевное состояние / разочарование, но мои поиски в Google и результаты stackoverflow не помогают мне.

Я хочу проверить, что минутная часть ввода времениравно либо 00, либо 30.

Я все еще изучаю Java и программирование в целом, поэтому иногда я не знаю правильной терминологии, чтобы начать поиск, поэтому я извиняюсь, если это было задано и получено.

Любые ответы должны быть где-то между новичком и промежуточным - если я не понимаю, я попытаюсь выяснить это самостоятельно, прежде чем просто ответить.

Это фрагмент моей последней попытки:

else if(timePart.getMinute() != 0 || 
        timePart.getMinute() != 30 ||
        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 ||
        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30)
{
    System.out.println(timePart.getMinute());
    System.out.println(appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute());
    Alert alert = new Alert(Alert.AlertType.INFORMATION);
    alert.setTitle("Correct the minutes");
    alert.setHeaderText(null);
    alert.setContentText("You are only allowed to enter the start and end time minutes on the hour or half hour (ie :00 or :30).");
    alert.showAndWait();
}

Я включил System.out, чтобы просто проверить, какие были разные результаты - оба будут печатать 0 для 9:00 AM и 30 для 9:30 AM.

Не уверен, что я делаю неправильно, но мое предупреждение всегда появляется, даже если введено правильное время.

Ответы [ 4 ]

0 голосов
/ 08 июня 2018

Чтобы проверить, делятся ли минуты на 30, вы можете использовать оператор %.таким образом, вы не будете проверять значение минут для 0 и 30:

else if(timePart.getMinute() % 30 != 0
        || appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.systemDefault()).getMinute() % 30 != 0) {
    ...
}
0 голосов
/ 08 июня 2018

Изменение и сравнение - нет или:

else if(timePart.getMinute() != 0 && timePart.getMinute() != 30 &&
                    appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 &&
                    appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30
                    )
            {
                System.out.println(timePart.getMinute());
                System.out.println(appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute());
                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                alert.setTitle("Correct the minutes");
                alert.setHeaderText(null);
                alert.setContentText("You are only allowed to enter the start and end time minutes on the hour or half hour (ie :00 or :30).");
                alert.showAndWait();
            }
0 голосов
/ 08 июня 2018

Я думаю, что условие:

else if((timePart.getMinute() != 0 && timePart.getMinute() != 30) ||
                    (appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 &&
                    appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30)
                    )
0 голосов
/ 08 июня 2018

Ваше условие всегда истинно.

    if (timePart.getMinute() != 0 || 
        timePart.getMinute() != 30 || 
        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 0 ||
        appointment.getSqlStartDateTime().toLocalDateTime().atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.systemDefault()).getMinute() != 30 )

Оно всегда всплывает, потому что минута всегда отличается от 0 ИЛИ отличается от 30.

Например, когда timePart.getMinute () равно 0тогда это отличается тогда 30 и наоборот.Вы должны показывать всплывающее окно, только когда:

  if ((timePart.getMinute() == 0 || timePart.getMinute() == 30 || ...) == false)

или короче

 if (!(timePart.getMinute() == 0 || timePart.getMinute() == 30 ||...))

или измените свой или на и:

 if (timePart.getMinute() != 0 && timePart.getMinute() != 30 || ...)
...