【问题标题】:passing boolean function to array将布尔函数传递给数组
【发布时间】:2015-12-26 13:33:56
【问题描述】:

要求的任务是计算如果星期一开始露营,可以连续露营的天数。 露营可以在晴天 (1) 或阴天 (2) 进行,但不能在雨天 (3) 进行。此外,它不应该太冷或太热。一天适合露营的3个条件是:

  • 温度至少为 24 度。

  • 温度最高为 30。

  • 天气晴朗或多云。

这是我的代码(由于需求,main函数不能修改,其他两个函数应该存在)

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 天。是否可以数数。以这种方式在数组中的真值?

【问题讨论】:

    标签: c++ arrays boolean


    【解决方案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

    【讨论】:

    • 要求连续天数,break为必填项。
    • @Jarod,啊,我错过了问题的那一部分。将编辑答案,谢谢
    【解决方案2】:

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

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

    一个建议:

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

    【讨论】:

    • 对于第一个提示,OP 使用数组与 fixed 提供的代码相反。
    • @Jarod42:感谢您指出这一点——这是多么糟糕的家庭作业!
    猜你喜欢
    • 2013-09-04
    • 2015-08-03
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多