我如何设置一个计数器来读取睡眠时间?

问题描述 投票:-1回答:1

我有这个作业,我必须在Java程序中输入一个文本文件。该文件是一个“床传感器”,它告诉您该人是处于深度睡眠,不安定睡眠还是中断睡眠(清醒),分别为0s,1s和2s。每行有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();
    }
}
java if-statement counter intro.js
1个回答
1
投票

我会给您一个(全面的)提示,因为这是一个家庭作业问题。

我的问题是我必须弄清该人何时入睡,然后输出“睡眠时间:午夜后的(答案)小时”。

首先,您将要初始化两个变量在while循环之前

  1. 某些布尔标志变量hasFallenAsleepYet
  2. 某些double变量fallenAsleepTime

例如:

boolean hasFallenAsleepYet = false;
double fallenAsleepTime;

现在,在while循环内,当您遍历sleepData时,您将要计算直到该人入睡为止所花费的时间,然后是[[停止计数。

if(!hasFallenAsleepYet) { if(val == someInteger || val == someOtherInteger){ // some condition to tell if the person is asleep hasFallenAsleepYet = true; fallenAsleepTime = totalSecondsCounter; } }
我将让您找出someInteger和someOtherInteger的数字,但是您应该能够很快弄清楚。他们的主要结论是,您需要初始化一些标志变量,以便在满足特定条件后停止跟踪fallenAsleepTime
© www.soinside.com 2019 - 2024. All rights reserved.