Punch Clock Пока проблема с петлей

Я пытаюсь создать свой собственный таймер с этим и хочу сделать часы удара, используя этот таймер, но мой цикл не повторяется (Время: 0: 0), он повторяется только после того, как я ввожу 2 числа, и я не могу понять почему, пожалуйста, помогите, у меня был Thread.sleep (60000) ниже minute = minute + 1, поэтому он работает с минутной скоростью, но удален, чтобы я мог быстрее видеть результаты

import java.util.Scanner;

public class Main {



        public static void main(String[] args) throws InterruptedException {

            Scanner sc = new Scanner(System.in);
            int minute = 0, hour = 0, punchi = 0, puncho = 0, TP, TH = 0, i = 0, o = 0;
            int power = 10;
            boolean k = true;
            String si, so;


        while (k == true) {

            System.out.println("Time: " + hour + ":" + minute);
            k = true;

            minute = minute + 30;

            k = true;
            if (minute == 60) {
            hour = hour + 1;
            minute = 0;
             k = true;
            }

            else
                k = true;

            if (hour == 24) {
                hour = 0;
                k = true;
            }
            else
                k = true;

            si = sc.nextLine();
            so = sc.nextLine();

                    if (si == "punchi") {
                        i = sc.nextInt();}
                    else
                        k = true;
                        i = sc.nextInt();

                    if (so == "puncho"){
                        o = sc.nextInt();

                    }
                    else
                        k = true;

                    if (o > 0) {
                        TH = (TH + o - i);
                        o = 0;
                        i = 0;

                        System.out.println("Power off?");
                            power = sc.nextInt();
                            k = true;}
                    else
                        k = true;

                        if (power == 9) {
                            TP = TH * 14;
                            k = false;
                            System.out.println("your total pay is " + TP); }

                        else 
                            k = true;

                    }






            }

        }

}

Прежде всего, для сравнения строк используйте s1.equals(s2), а не s1==s2. Любые проблемы, которые остаются у вас после внесения этих изменений, с большей вероятностью будут «настоящими» проблемами.

Kevin Anderson 16.08.2018 05:00

Плюс у вас есть import прямо в середине объявления вашего класса. Как это вообще компилируется?

Kevin Anderson 16.08.2018 05:20

Пожалуйста, уточните свой вопрос и отформатируйте его тоже ~

Hearen 16.08.2018 05:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина, по которой он не зацикливается, пока вы не введете два числа, заключается в том, что функция следующей строки сканера, которую вы используете, блоки, пока не получит значение, поскольку у вас есть два вызова следующей строки, для продолжения цикла требуется два значения.

Если он не блокируется, цикл может произойти настолько быстро, что вы не сможете ввести предложение, потому что к моменту выполнения итерации цикла вы, возможно, наберете только одну букву.

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

Итак, у меня был бы первый цикл while, помещающий таймер и помещающий thread.sleep после минуты = минута + 1, затем еще один цикл, ищущий вывод, равный punchi и puncho, затем давал им значения таймера, когда они выводятся, затем минус punchi from puncho, затем конечный цикл для первого цикла ищет "выключено", затем, когда выскакивает, он закрывает цикл, вычисляя общую выплату.

Josh 16.08.2018 13:23

Если вы всегда ожидаете, что удар будет перед любым, вы можете поместить две строки чтения в один поток, причем первым будет вызван удар. Если входящие и исходящие удары не в порядке, они должны быть в разных потоках, чтобы они не блокировали друг друга.

MarcusOuelletus 16.08.2018 15:46

Другие вопросы по теме