我对c++编程非常陌生,我有一个2D数组和for循环的问题。我一直在寻找解决方案,我最近做的所有程序,但其他一切都很好。除了这个for循环。
这只是程序的一小部分,但似乎问题是在这段代码。这个程序基本上是一个测试。有5个问题,有3个答案选项,用户应该输入1,2,3 (int值,负责将这些值获取到atsakymai[]数组的函数工作正常)。JDM, USDM, EUDM数组应该保留正确答案的点数(它们在开始时被设置为0)。atsakymoVerte数组保持答案顺序,从哪个点依赖。例如:1 - +1点到JDM;2 - 1+ USDM;3 - 1+到EUDM
这个程序似乎可以正常工作,直到for循环到达y = 4。但是在那之后它给出了不好的值…前3次循环工作良好,并将右变量(来自JDM, USDM或EUDM数组的变量)加1。一切都很好,直到第四次循环…我不知道该怎么做才能让它正常工作。我在这个问题旁边坐了几个小时,但是……没有解决方案。我希望你们能理解我的问题。谢谢。
int *JDM = new int[6]();
int *USDM = new int[6]();
int *EUDM = new int[6]();
int atsakymoVerte[6][4] = {
{0,0,0,0},
{0,2,1,3},
{0,2,1,3},
{0,1,2,3},
{0,3,1,2},
{0,3,1,2}
};
for (int y = 1 ; y < 6; y++) {
for (int x = 1; x < 4; x++) {
if (atsakymai[y] == atsakymoVerte[y][x]) {
switch (x) {
case 1: JDM[y]++;
break;
case 2: USDM[y]++;
break;
case 3: EUDM[y]++;
break;
}
}
}
}
不了解c++ -尽管许多其他语言都有0索引数组。这意味着0是第一个元素。
所以不用
for (int y = 1 ; y < 6; y++)
for (int x = 1; x < 4; x++)
应该是
for (int y = 0 ; y < 6; y++)
for (int x = 0; x < 4; x++)
通过使用您现在拥有的循环,第一次传递的y
等于1
-这将是atsakymai[1]
-实际上是atsakymai
数组中的第二个元素,而不是第一个元素。
如果你不小心,你也可能会试图引用一个不存在的索引。
我想你实际上是在计算n-2个循环,把for循环改成
for (int y = 0 ; y < 6; y++)
for (int x = 0; x < 4; x++)
这个atsakymai[y]
在哪里声明你必须定义它来比较你的数组否则你会不断得到错误
你正在伪造一个基于1的数组,你不应该这样做。这会导致许多问题并浪费内存。为什么要创建无用的元素呢?如果你有一个1000 × 1000的"2d"数组,你会浪费2000个元素。
我将有如下
// remove useless elements
int *JDM = new int[5]();
int *USDM = new int[5]();
int *EUDM = new int[5]();
int atsakymoVerte[5][3] = {
{2,1,3},
{2,1,3},
{1,2,3},
{3,1,2},
{3,1,2}
};
for (int y = 0 ; y < 5; y++) {
for (int x = 0; x < 3; x++) {
// WARNING: Make sure to remove useless elements
if (atsakymai[y] == atsakymoVerte[y][x]) { // in atsakymai and re-write previous indexes
switch (x) {
case 1: JDM[y]++;
break;
case 2: USDM[y]++;
break;
case 3: EUDM[y]++;
break;
}
}
}
}