我正在尝试根据输入的月份和日期编写一个返回季节的代码。到目前为止我发现了这个,但似乎没有用。任何帮助都会很棒!!
#define TONE_PERIOD 10 /* Period in milliseconds */
unsigned long lastPulseStart;
byte volume;
void setup()
{
volume = ...;
lastPulseChange = millis();
}
void loop()
{
if (lastPulseStart - millis() < TONE_PERIOD/2)
analogWrite(pin, volume);
else if (lastPulseStart - millis() < TONE_PERIOD)
analogWrite(pin, 0);
else
lastPulseStart += TONE_PERIOD;
}
答案 0 :(得分:1)
我不会发布代码让你自己找到它,这个算法非常有趣。 (这似乎是一个家庭作业)
但是使用它有一个更简单的解决方案:
public static final String[] SEASONS = {"Winter", "Spring", "Summer", "Fall"};
有了这个,你只需要找到一种方法将一个月和一天转换为0到3之间的季节。只是一个提示,有四个赛季分为12个月。如果您在特定月份和第15天之后,您实际上是在下一季。
最后一个提示,一切都是用数学基础算子(+ - / *%)完成的。
PS:如果有人没有发现这是一个答案,我会稍后添加代码(如果被要求的话);)答案 1 :(得分:0)
第一个 if语句 if(month>=9&&month<=12)
,另一个如果需要添加=
。
答案 2 :(得分:0)
我纠正了你的方法。
public String season (int month, int day){
if (month>=9 && month<=12){
if (month >= 9 && day>=16 || month <=12 && day<=15){
return "Fall";
}
}else if (month>=6 && month<=9){
if (month>=6 && day>=16 || month<=9 && day<=15){
return "Summer";
}
}else if(month>=3 && month<=6){
if (month>=3 && day>=16 || month<=6 && day<=15){
return "Sprint";
}
}else {
return "Winter";
}
return "";
}
以下测试
System.out.println(sl.season(10, 18));
System.out.println(sl.season(7, 18));
System.out.println(sl.season(5, 18));
System.out.println(sl.season(2, 18));
打印出来
Fall
Summer
Sprint
Winter
答案 3 :(得分:0)
您可以将月份和日期转换为一个可比较的双倍。
int comparableDate = month * 100 + day;
然后设置测试间隔
if( comparableDate >= 916 && comparableDate <= 1215)
return "fall";
if( comparableDate >= 616 && comparableDate <= 615)
return "summer";
等。