【问题标题】:Using return statement in a for loop在 for 循环中使用 return 语句
【发布时间】:2024-06-15 22:15:01
【问题描述】:

我有一个课程TemperatureCalculator,它计算今天是哪一天,哪一天最热。它对向量进行操作。该向量由用户的输入填充。除了 klimaTag() 函数外,一切正常。

我知道为什么它不能按应有的方式工作,但我不知道如何在不使用 std::cout 而不是使用 return 语句的情况下解决它。 该函数应替换为字符串。在我的实现中,它为向量中不正确的每个数字给出“Sommertag”。

谁能告诉我怎么解决?

代码:

#include <iostream>
#include <vector>

class TemperatureCalculator {
private:
    std::vector<float> temperatures;

public:
    TemperatureCalculator(std::vector<float> temperatures) {
        this->temperatures = temperatures;
    }

    std::string klimaTag() {
        for (std::vector<float>::iterator i = temperatures.begin(); i != temperatures.end(); i++) {
            if (*i >= 25 and *i < 30) {
                return "Sommertag";
            }
            else if (*i >= 30 and *i < 35) {
                return "Heißer Tag";
            }
            else if (*i >= 35) {
                return "Wüstentag";
            }
            else {
                return "Normaltag";
            }
        }
    }

    float maxNumber() {
        float current_max = 0;
        for (std::vector<float>::iterator i = temperatures.begin(); i != temperatures.end(); i++) {
            if (*i > current_max) {
                current_max = *i;
            }
        }
        return current_max;
    }

    void get_user_input() {
        int numberDays;
        std::cout << "Wie viele Tage möchten Sie auswerten?" << std::endl;
        std::cin >> numberDays;
        
        float current_temp;
        
        for (int i = 0; i < numberDays; i++) {
            std::cout << "Hoechsttemp für Tag " << i + 1 << " eingeben: ";
            std::cin >> current_temp;
            temperatures.push_back(current_temp);
        }
    }

    std::vector<float> get_temperature() {
        return this->temperatures;
    }

};

int main()
{
    TemperatureCalculator t({});
    t.get_user_input();
    
    for (int i = 0; i < t.get_temperature().size(); i++) {
        std::cout << "Tag " << i + 1 << " ist ein " << t.klimaTag() << std::endl;
    }
    std::cout << t.maxNumber();
}

【问题讨论】:

  • 一个 return 打破了 for 循环。因此,您的 klimaTag 函数将循环遍历温度,但只返回一个与温度向量中的第一项对应的值。
  • 你根本不需要klimaTag 中的循环,而是应该将i 作为参数传递给它。
  • 考虑一下:这些天你有一个循环。在里面你调用了一个方法,它本身在几天内循环。这真的是你想要的吗?
  • 查看 this C++ reference 以及您的 C++ 编译器(例如 GCC ...)和调试器(例如 GDB)的文档...从现有 C++ 开源项目(例如 @ 987654324@, fish, RefPerSys, FLTK. 好好读一读C++ programming book

标签: c++ function class oop return-value


【解决方案1】:

首先,如何解决它。我会尽量保留您的代码,以便您可以看到最重要的更改。

在 climaTag 中:

std::string klimaTag(int index) {
    float temperature = temperatures[index];
    if (temperature >= 25 and temperature < 30) {
        return "Sommertag";
    }
    else if (temperature >= 30 and temperature < 35) {
        return "Heißer Tag";
    }
    else if (temperature >= 35) {
        return "Wüstentag";
    }
    else {
        return "Normaltag";
    }
}

在 main() 中:

...
for (int i = 0; i < t.get_temperature().size(); i++) {
        std::cout << "Tag " << i + 1 << " ist ein " << t.klimaTag(i) << std::endl;
    }
...

为什么会有这些变化? 因为之前,你循环了temperatures 两次。一次主要,另一次在klimaTag。每次调用klimaTag 时,它都会查看温度[0],发现它在25 到30 之间,然后返回Sommertag。在return 之后不会再发生任何事情。

【讨论】:

  • if ... else if 阶梯中的代码可以通过重新排列来简化:if (temperature &lt; 25) ... else if (temperature &lt; 30) ... else if (temperature &lt; 35) ... else ...。 +1。
  • 对,没错。才意识到 op 使用 and 而不是 &amp;&amp; 并且它......有效吗?每天学习新东西。
  • 是的,and 是 Python 程序员的不幸。
最近更新 更多