繁体   English   中英

将布尔函数传递给数组

[英]passing boolean function to array

必需的任务是计算如果在星期一开始露营,则可以露营的连续天数。 可以在晴天(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天。 是否可以计算出否。 这样以数组形式显示真实情况?

该代码有几个问题,其中一个是数组索引在这里不可用:

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);

一个建议:

  • 了解如何使用调试器-单步执行代码并检查变量将有助于快速识别错误

你需要改变你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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM