2015-09-29 110 views
1

所需的任务是计算周一露营开始时可以驻扎的连续天数。 露营可以在晴天(1)或多云(2)天进行,但不能在下雨天(3天)进行。另外,它不应该太冷或太热。的3个条件,每天以适合于野营是:将布尔函数传递给数组

  • 温度为至少24

  • 温度为至多30

  • 天气或者是晴天或阴天。

这是我的代码(由于要求,功能不能被修改并且两个其他功能必须存在)

bool isSuitableForCamping(int minTemp, int maxTemp, int weather) 
{ 
if (minTemp >= 24 && maxTemp <= 30 && (weather == 1 || weather == 2)) 
{return true;} 
else 
{return false;} 
} 

int getMaxCampingDaysIfStartOnMonday(
    int mondayMinTemp, int mondayMaxTemp, int mondayWeather, 
    int tuesdayMinTemp, int tuesdayMaxTemp, int tuesdayWeather, 
    int wednesdayMinTemp, int wednesdayMaxTemp, int wednesdayWeather, 
    int thursdayMinTemp, int thursdayMaxTemp, int thursdayWeather, 
    int fridayMinTemp, int fridayMaxTemp, int fridayWeather, 
    int saturdayMinTemp, int saturdayMaxTemp, int saturdayWeather, 
    int sundayMinTemp, int sundayMaxTemp, int sundayWeather 
    ) 
{ 
int dayCount = 0; 
bool dayList[7]; 
dayList[0] = isSuitableForCamping(mondayMinTemp, mondayMaxTemp, mondayWeather); 
dayList[2] = isSuitableForCamping(tuesdayMinTemp, tuesdayMaxTemp, tuesdayWeather); 
dayList[3] = isSuitableForCamping(wednesdayMinTemp, wednesdayMaxTemp, wednesdayWeather); 
dayList[4] = isSuitableForCamping(thursdayMinTemp, thursdayMaxTemp, thursdayWeather); 
dayList[5] = isSuitableForCamping(fridayMinTemp, fridayMaxTemp,fridayWeather); 
dayList[6] = isSuitableForCamping(saturdayMinTemp, saturdayMaxTemp, saturdayWeather); 
dayList[7] = isSuitableForCamping(sundayMinTemp, sundayMaxTemp, sundayWeather); 

for (int i = 0; i < 7; i++) 
{ 
    if (dayList[i] == true) 
    { 
     dayCount++; 
    } 
    else 
     break; 
} 
return dayCount; 
} 

int main() 
{ 

//Get Monday's weather forecast data 
int mondayMinTemp, mondayMaxTemp, mondayWeather; 
cout << "Monday's minimum temperature: "; 
cin >> mondayMinTemp; 
cout << "Monday's maximum temperature: "; 
cin >> mondayMaxTemp; 
cout << "Monday's weather (1:Sunny 2:Cloudy 3:Rainy): "; 
cin >> mondayWeather; 
cout << endl; 
    . 
    . 
    . 


//Get Sunday's weather forecast data 
int sundayMinTemp, sundayMaxTemp, sundayWeather; 
cout << "Sunday's minimum temperature: "; 
cin >> sundayMinTemp; 
cout << "Sunday's maximum temperature: "; 
cin >> sundayMaxTemp; 
cout << "Sunday's weather (1:Sunny 2:Cloudy 3:Rainy): "; 
cin >> sundayWeather; 
cout << endl; 


    cout << "If you start camping on Monday, you would be able to camp for " 
       << getMaxCampingDaysIfStartOnMonday(mondayMinTemp, mondayMaxTemp, mondayWeather, 
         tuesdayMinTemp, tuesdayMaxTemp, tuesdayWeather, 
         wednesdayMinTemp, wednesdayMaxTemp, wednesdayWeather, 
         thursdayMinTemp, thursdayMaxTemp, thursdayWeather, 
         fridayMinTemp, fridayMaxTemp, fridayWeather, 
         saturdayMinTemp, saturdayMaxTemp, saturdayWeather, 
         sundayMinTemp, sundayMaxTemp, sundayWeather) 
       << " day(s) at most!" << endl; 
    return 0; 
} 

我试图输入的值,使得第一应该有三天的露营时间。然而它总是最多让我返回1天。是否有可能数不?这样的数组中的trues?

回答

1

有几个问题的代码,一个是你的数组索引是在这里下车:

dayList[0] = isSuitableForCamping(mondayMinTemp, mondayMaxTemp, mondayWeather); 
dayList[2] = isSuitableForCamping(tuesdayMinTemp, tuesdayMaxTemp, tuesdayWeather); 
dayList[3] = isSuitableForCamping(wednesdayMinTemp, wednesdayMaxTemp, wednesdayWeather); 
dayList[4] = isSuitableForCamping(thursdayMinTemp, thursdayMaxTemp, thursdayWeather); 
dayList[5] = isSuitableForCamping(fridayMinTemp, fridayMaxTemp,fridayWeather); 
dayList[6] = isSuitableForCamping(saturdayMinTemp, saturdayMaxTemp, saturdayWeather); 
dayList[7] = isSuitableForCamping(sundayMinTemp, sundayMaxTemp, sundayWeather); 

你跳过元素1,然后占领了数组的结尾。它应该是:

dayList[0] = isSuitableForCamping(mondayMinTemp, mondayMaxTemp, mondayWeather); 
dayList[1] = isSuitableForCamping(tuesdayMinTemp, tuesdayMaxTemp, tuesdayWeather); 
dayList[2] = isSuitableForCamping(wednesdayMinTemp, wednesdayMaxTemp, wednesdayWeather); 
dayList[3] = isSuitableForCamping(thursdayMinTemp, thursdayMaxTemp, thursdayWeather); 
dayList[4] = isSuitableForCamping(fridayMinTemp, fridayMaxTemp,fridayWeather); 
dayList[5] = isSuitableForCamping(saturdayMinTemp, saturdayMaxTemp, saturdayWeather); 
dayList[6] = isSuitableForCamping(sundayMinTemp, sundayMaxTemp, sundayWeather); 

一个建议:

  • 学习如何使用调试器 - 单步调试代码和检查变量将有助于查明您的问题时会非常迅速地
+0

对于第一个提示,OP使用的数组与* fixed *提供的代码相反。 – Jarod42

+0

@ Jarod42:谢谢你指出 - 这是一个非常糟糕的家庭作业! –

1

您需要更改您的for周期,以便在第一个不适宜的一天之后不会中断。

//this is the amount of consecutive days that we are currently counting 
int currentConsecutiveDays = 0; 
//this is the maximum amount of consecutive days in the whole week 
int maxConsecutiveDays = 0; 
for (int i = 0; i < 7; i++) 
{ 
    if (dayList[i] == true) 
    { 
     currentConsecutiveDays++; 
    } 
    //we need the second condition for the case when 
    //the consecutive days end up on Sunday. 
    else if(dayList[i] == false || i == 6) 
    { 
     if(currentConsecutiveDays > maxConsecutiveDays) 
      maxConsecutiveDays = currentConsecutiveDays; 
     currentConsecutiveDays = 0; 
    } 
} 

而且您在dayList跳过指数1。如果一个数组有N个元素,那么该数组的索引应该是0, 1, ..., N - 1

+0

因为要求有连续的日子,所以需要'bre​​ak'。 – Jarod42

+0

@Jarod,啊,我错过了那部分问题。将编辑答案,谢谢 – SingerOfTheFall