пытаюсь вывести элемент массива в с ++ - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь найти, какие элементы в этом массиве c ++ содержат наибольшее значение, а затем вывести ключ этого элемента, но он продолжает выводить список чисел, например 9044007. Я хочу знать, как мне вывести первое число только потому, что я предполагаю, что он выводит все ключи элементов с одинаковым значением.

double max = 0;
for (int i = 1; i <= 9; i++) {
    if (responselayer[i] > max) {
        max = responselayer[i];
    }
}
for (int i = 1; i < 10; i++) {
    if (responselayer[i] == max) {
        return i;
        break;
    }
}

Вот часть кода, которая заполняет все это. Код много, поэтому сложно сделать его минимальным. Это моя первая попытка стека, поэтому я не знаю, как здесь все работает.

//final layer input calculation and output//
    for (int j = 1; j <= 10; j++) {
        double subval = 0;
        if (j == 1) {

            for (int i = 0; i < 5; i++) {
                subval = (midlayerweight4[i] * midlayer3[i]) + subval;
                responselayer[j] = subval;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));

        }
        else if (j == 2) {
            int k = 0;
            for (int i = 5; i < 10; i++) {

                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));

        }
        else if (j == 3) {
            int k = 0;
            for (int i = 10; i <15; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));

        }
        else if (j == 4) {
            int k = 0;
            for (int i = 15; i < 20; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 5) {
            int k = 0;
            for (int i = 20; i <25; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 6) {
            int k = 0;
            for (int i = 25; i <30; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 7) {
            int k = 0;
            for (int i = 30; i <35; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 8) {
            int k = 0;
            for (int i = 35; i < 40; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 9) {
            int k = 0;
            for (int i = 40; i <45; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
    }
    double max = 0;
    for (int i = 1; i <10; i++) {
        if (responselayer[i] > max) {
            max = responselayer[i];
        }
    }
    for (int i = 1; i < 10; i++) {
        if (responselayer[i] == max) {
            return i;
        }
    }

}

} midlayerweight4 [] был заполнен массивом до него таким же образом, как и другие за ним. Это объявление для responselayer, и все остальные используемые массивы имели тип double, и все они были объявлены вне массива.

double responselayer[10];

1 Ответ

1 голос
/ 23 апреля 2020

Несколько вещей:

  • Индексирование массива в C / C ++ начинается с нуля.
  • Вы не показываете нам тип вашего массива, поэтому я собираюсь предположить это double responselayer[SZ]; Если это не так, у вас есть некоторые проблемы, связанные с неявным преобразованием типов из целочисленных типов в типы с плавающей запятой.
  • Неправильно использовать 2 различных стиля условий в вашем for-l oop.
  • Неправильно использовать магические c числа в вашем коде.

Я написал бы код следующим образом:

size_t find_max_index(const double data[], size_t size) {
  size_t max_index = 0;
  // No need to compare data[0] to itself on the first iteration, so
  // loop starts at one
  for (size_t i = 1; i < size; ++i)
    if (data[i] > data[max_index])
      max_index = i;
  return max_index;
}

Или получая немного любитель и заботясь о возможности странности с плавающей точкой, мы можем сделать это шаблонной функцией:

template <typename T>
size_t find_max_index(const T data[], size_t size) {
  size_t max_index = 0;
  for (size_t i = 1; i < size; ++i)
    if (data[i] > data[max_index])
      max_index = i;
  return max_index;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...