【问题标题】:finding the lowest element of an array查找数组的最低元素
【发布时间】:2020-11-25 20:45:39
【问题描述】:

所以我试图使用 if 和 else if 循环找到具有最低值的元素。

我已经输入了这个确切的东西来找到最高值。

就像我从字面上复制和粘贴相同的代码一样,我只是更改了符号。

这个功能完美。

但是为了找到这段代码中的最小值,它只是返回为month1 = 0,值为0。

我已经认真地逐行扫描,看看是否有问题。

但我真的不知道出了什么问题,这有点令人沮丧。

请帮忙。

变量最低是双精度。

变量month1是一个整数。

    if(rainfall[0] < rainfall[1] & rainfall[0] < rainfall[2] & rainfall[0] < rainfall[3]
       & rainfall[0] < rainfall[4] & rainfall[0] < rainfall[5] & rainfall[0] < rainfall[6]
       & rainfall[0] < rainfall[7] & rainfall[0] < rainfall[8] & rainfall[0] < rainfall[9]
       & rainfall[0] < rainfall[10] & rainfall[0] < rainfall[11])
       {
           lowest = rainfall[0];
           month1 = 1;
       }
    else if(rainfall[1] < rainfall[0] & rainfall[1] < rainfall[2] & rainfall[1] < rainfall[3]
       & rainfall[1] < rainfall[4] & rainfall[1] < rainfall[5] & rainfall[1] < rainfall[6]
       & rainfall[1] < rainfall[7] & rainfall[1] < rainfall[8] & rainfall[1] < rainfall[9]
       & rainfall[1] < rainfall[10] & rainfall[1] < rainfall[11])
       {
           lowest = rainfall[1];
           month1 = 2;
       }
    else if(rainfall[2] < rainfall[0] & rainfall[2] < rainfall[1] & rainfall[2] < rainfall[3]
       & rainfall[2] < rainfall[4] & rainfall[2] < rainfall[5] & rainfall[2] < rainfall[6]
       & rainfall[2] < rainfall[7] & rainfall[2] < rainfall[8] & rainfall[2] < rainfall[9]
       & rainfall[2] < rainfall[10] & rainfall[2] < rainfall[11])
       {
           lowest = rainfall[2];
           month1 = 3;
       }
    else if(rainfall[3] < rainfall[0] & rainfall[3] < rainfall[1] & rainfall[3] < rainfall[2]
       & rainfall[3] < rainfall[4] & rainfall[3] < rainfall[5] & rainfall[3] < rainfall[6]
       & rainfall[3] < rainfall[7] & rainfall[3] < rainfall[8] & rainfall[3] < rainfall[9]
       & rainfall[3] < rainfall[10] & rainfall[3] < rainfall[11])
       {
           lowest = rainfall[3];
           month1 = 4;
       }
    else if(rainfall[4] < rainfall[1] & rainfall[4] < rainfall[2] & rainfall[4] < rainfall[3]
       & rainfall[4] < rainfall[0] & rainfall[4] < rainfall[5] & rainfall[4] < rainfall[6]
       & rainfall[4] < rainfall[7] & rainfall[4] < rainfall[8] & rainfall[4] < rainfall[9]
       & rainfall[4] < rainfall[10] & rainfall[4] < rainfall[11])
       {
           lowest = rainfall[4];
           month1 = 5;
       }
    else if(rainfall[5] < rainfall[1] & rainfall[5] < rainfall[2] & rainfall[5] < rainfall[3]
       & rainfall[5] < rainfall[4] & rainfall[5] < rainfall[0] & rainfall[5] < rainfall[6]
       & rainfall[5] < rainfall[7] & rainfall[5] < rainfall[8] & rainfall[5] < rainfall[9]
       & rainfall[5] < rainfall[10] & rainfall[5] < rainfall[11])
       {
           lowest = rainfall[5];
           month1 = 6;
       }
    else if(rainfall[6] < rainfall[0] & rainfall[6] < rainfall[1] & rainfall[6] < rainfall[2]
       & rainfall[6] < rainfall[3] & rainfall[6] < rainfall[4] & rainfall[6] < rainfall[5]
       & rainfall[6] < rainfall[7] & rainfall[6] < rainfall[8] & rainfall[6] < rainfall[9]
       & rainfall[6] < rainfall[10] & rainfall[6] < rainfall[11])
       {
           lowest = rainfall[6];
           month1 = 7;
       }
    else if(rainfall[7] < rainfall[1] & rainfall[7] < rainfall[2] & rainfall[7] < rainfall[3]
       & rainfall[7] < rainfall[4] & rainfall[7] < rainfall[5] & rainfall[7] < rainfall[6]
       & rainfall[7] < rainfall[0] & rainfall[7] < rainfall[8] & rainfall[7] < rainfall[9]
       & rainfall[7] < rainfall[10] & rainfall[7] < rainfall[11])
       {
           lowest = rainfall[7];
           month1 = 8;
       }
    else if(rainfall[8] < rainfall[1] & rainfall[8] < rainfall[2] & rainfall[8] < rainfall[3]
       & rainfall[8] < rainfall[4] & rainfall[8] < rainfall[5] & rainfall[8] < rainfall[6]
       & rainfall[8] < rainfall[7] & rainfall[8] < rainfall[0] & rainfall[8] < rainfall[9]
       & rainfall[8] < rainfall[10] & rainfall[8] < rainfall[11])
       {
           lowest = rainfall[8];
           month1 = 9;
       }
    else if(rainfall[9] < rainfall[1] & rainfall[9] < rainfall[2] & rainfall[9] < rainfall[3]
       & rainfall[9] < rainfall[4] & rainfall[9] < rainfall[5] & rainfall[9] < rainfall[6]
       & rainfall[9] < rainfall[7] & rainfall[9] < rainfall[8] & rainfall[9] < rainfall[0]
       & rainfall[9] < rainfall[10] & rainfall[9] < rainfall[11])
       {
           lowest = rainfall[9];
           month1 = 10;
       }
    else if(rainfall[10] < rainfall[1] & rainfall[10] < rainfall[2] & rainfall[10] < rainfall[3]
       & rainfall[10] < rainfall[4] & rainfall[10] < rainfall[5] & rainfall[10] < rainfall[6]
       & rainfall[10] < rainfall[7] & rainfall[10] < rainfall[8] & rainfall[10] < rainfall[9]
       & rainfall[10] < rainfall[0] & rainfall[10] < rainfall[11])
       {
           lowest = rainfall[10];
           month1 = 11;
       }
    else if(rainfall[11] < rainfall[1] & rainfall[11] < rainfall[2] & rainfall[11] < rainfall[3]
       & rainfall[11] < rainfall[4] & rainfall[11] < rainfall[5] & rainfall[11] < rainfall[6]
       & rainfall[11] < rainfall[7] & rainfall[11] < rainfall[8] & rainfall[11] < rainfall[9]
       & rainfall[11] < rainfall[10] & rainfall[11] < rainfall[0])
       {
           lowest = rainfall[11];
           month1 = 12;
       }

【问题讨论】:

  • 一方面&amp; 是按位与,&amp;&amp; 是逻辑与。 (你想要后者)。
  • AND 操作是&amp;&amp;,带有两个&。你正在做的是完全不同的事情。
  • 以后用语言标记你的问题 - 不要把语言放在标题中。

标签: c++ arrays variables element


【解决方案1】:

如 cmets 中所述,您使用的是 &amp; BITWISE AND 运算符,而您应该使用 &amp;&amp; LOGICAL AND 运算符。

但即便如此,您提供的代码中也没有循环,只有一大堆ifs,这是非常低效、容易出错且难以维护的。使用 actual 循环将大大简化代码并解决您的问题,例如:

double lowest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
    if (rainfall[i] < lowest) {
        lowest = rainfall[i];
        month1 = i + 1;
    }
}

对于最高值也是如此:

double highest = rainfall[0];
int month1 = 1;
for(int i = 1; i < 12 ++i) {
    if (rainfall[i] > highest) {
        highest = rainfall[i];
        month1 = i + 1;
    }
}

话虽如此,请考虑改用标准的std::min_element()std::max_element() 算法:

#include <algorithm>

auto iter = std::min_element(rainfall, rainfall + 12);
double lowest = *iter;
int lowest_month1 = std::distance(rainfall, iter) + 1;

iter = std::max_element(rainfall, rainfall + 12);
double highest = *iter;
int highest_month1 = std::distance(rainfall, iter) + 1;

或者,标准的std::minmax_element()算法:

#include <algorithm>

auto iters = std::minmax_element(rainfall, rainfall + 12);

double lowest = *(iters.first);
double highest = *(iters.second);

int lowest_month1 = std::distance(rainfall, iters.first) + 1;
int highest_month1 = std::distance(rainfall, iters.second) + 1;

【讨论】:

  • 感谢循环帮助!我自己对他们还是很怀疑。至于你评论的后半部分,对不起。还没有学到任何东西,如果我实际上不知道它的作用,我会觉得使用它不舒服。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
相关资源
最近更新 更多