我有这个作业,我必须在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();
}
}
我会给您一个(全面的)提示,因为这是一个家庭作业问题。
我的问题是我必须弄清该人何时入睡,然后输出“睡眠时间:午夜后的(答案)小时”。
首先,您将要初始化两个变量在while循环之前:
hasFallenAsleepYet
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
。