2D数组和for循环的问题

Issue with 2D arrays and for loop

本文关键字:问题 循环 for 数组 2D      更新时间:2023-10-16

我对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;
           }
        }
    }
}