Как настроить счетчик для чтения времени сна? - PullRequest
0 голосов
/ 08 марта 2020

У меня есть домашнее задание, в котором я должен ввести текстовый файл в мою java программу. файл является «датчиком постели» и сообщает вам, находится ли человек в глубоком сне, беспокойном сне или прерывистом сне (бодрствующем), с 0, 1 и 2 с соответственно. каждая строка имеет 0, 1 или 2, и есть 86 400 строк (одна строка для каждой секунды дня).

Я выяснил большую часть назначения, но одну часть я не могу понять, как кодировать ,

Моя проблема в том, что мне нужно выяснить, когда человек засыпает, а затем вывести «Время сна: (ответ) часов после полуночи».

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

public static void main(String[] args) {
    try {
        File sleepDataFile = new File("/Users/homeWork3/sleep_data.csv");
        Scanner sleepData = new Scanner(sleepDataFile); // scans the data from the file into this java program
        double totalSecondsCounter = 0, wakeCounter = 0, timeAwakeCounter = 0, timeAsleepCounter = 0, deepSleepCounter = 0, restlessSleepCounter = 0, interruptedSleepCounter = 0;
        double wakeUpTime = 0, sleepTime = 0;
        double sleepQuality = 0;

        boolean inSleep = false;

        while (sleepData.hasNextLine()) // this loop writes data to java as long as there is a next line
        {
            String data = sleepData.nextLine(); //  converts the file data to strings
            double val = Double.parseDouble(data); //   changes string type to double type
            totalSecondsCounter++;

            if (inSleep == true) {
                timeAsleepCounter++;
            }
            if (inSleep == false) {
                timeAwakeCounter++;
            }
            if (val == 0) //deep sleep
            {
                deepSleepCounter++;
                inSleep = true;
                wakeCounter = 0;

            }
            if (val == 1) //restless sleep
            {
                restlessSleepCounter++;
                inSleep = true;
                wakeCounter = 0;
            }
            if (val == 2) // interrupted sleep / awake
            {
                wakeCounter++;
                inSleep = false;
            }
            if (val == 2 && wakeCounter < 1800) {
                interruptedSleepCounter++;
                inSleep = true;
            }
            if (val == 2 && wakeCounter > 1800) {
                inSleep = false;
            }
            if (wakeCounter == 1800) // 1800 seconds = 30 minutes. counter is set for 30 min of interrupted sleep.
            {
                wakeUpTime = totalSecondsCounter;
            }
            if (val != 2) {

            }

        }
        sleepData.close();


        System.out.println("Sleep Report for 24 hour period.");
        System.out.println("----------------------------------------------------------");
        System.out.println("Wake Time: \t\t\t\t" + wakeUpTime / 60 / 60 + "\t hours after midnight");
        System.out.println("Sleep Time: \t\t\t\t" + sleepTime / 60 / 60 + "\t\t\t hours after midnight");
        System.out.println("Duration of Deep Sleep: \t\t" + deepSleepCounter / 60 / 60 + "\t hours");
        System.out.println("Duration of Restless Sleep: \t\t" + restlessSleepCounter / 60 / 60 + "\t hours");
        System.out.println("Duration of Interrupted Sleep: \t\t" + interruptedSleepCounter / 60 / 60 + "\t hours");

    } catch (FileNotFoundException e) {
        System.out.println("An error occurred.");
        e.printStackTrace();
    }
}

1 Ответ

1 голос
/ 08 марта 2020

Я просто дам вам (всесторонний) совет, поскольку это домашнее задание.

Моя проблема в том, что мне нужно выяснить, когда человек засыпает, а затем вывести «Время сна». : (ответ) часов после полуночи ".

Прежде всего, вы захотите инициализировать две переменные перед вашим временем l oop:

  1. Некоторая переменная логического флага hasFallenAsleepYet
  2. Некоторая double переменная fallenAsleepTime

Примерно так:

boolean hasFallenAsleepYet = false;
double fallenAsleepTime;

Теперь внутри из вашего времени l oop, когда вы итерируете по sleepData, вы захотите сосчитать время, затрачиваемое на то, чтобы человек заснул, а затем прекратите считать .

if(!hasFallenAsleepYet) {
    if(val == someInteger || val == someOtherInteger){ // some condition to tell if the person is asleep
        hasFallenAsleepYet = true;
        fallenAsleepTime = totalSecondsCounter;
    }
}

Я оставлю вас, чтобы выяснить, каковы числа someInteger и someOtherInteger, но вы должны быть в состоянии понять это быстро. Вывод ключа здесь заключается в том, что вам нужно инициализировать некоторую переменную-флаг, чтобы вы перестали отслеживать fallenAsleepTime после выполнения определенного условия.

...