【发布时间】:2020-04-23 02:36:45
【问题描述】:
我正在尝试搜索此 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 的声明,所有其他使用的 arras 都是 double 类型,它们都在数组之外声明。
double responselayer[10];
【问题讨论】:
-
看起来您确实在阵列中进行了越界访问。你的数组是什么类型的,在哪里初始化的?
-
是的,请说明
responselayer的声明和填充位置。还有break;什么也没做。return;已经从函数返回。 -
数组是在函数外部声明的,它的类型是double。
-
我们真正想知道的是数组的大小以及如何分配它以确定循环中是否发生越界访问。
标签: c++ arrays for-loop if-statement