我对C ++编程很新,我有2D数组和循环的问题..我正在寻找我最近制作的程序解决方案,但其他一切都很好。除了这个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数组)。一切顺利,直到第四次循环...我不知道我应该改变什么才能让它正常工作。我坐在这个问题旁边几个小时,但是没有解决方案。我希望你们能理解我的问题是什么。感谢。
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;
}
}
}
}
答案 0 :(得分:1)
不了解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]
- 这实际上是{{1}中的第二个元素数组,而不是第一个。
如果您不小心,您最终也可能会尝试引用一个不存在的索引。
答案 1 :(得分:1)
我认为你实际上是通过n-2计算循环,将你的循环改为
<<<<<<< ours
||||||| base
<<<<<<< Temporary merge branch 1
||||||| merged common ancestors
if (sendRedirect(result))
return new Result("redirect");
=======
if ( result.getId() != null )
{
object = new SomeObject(searchResult.getId()) ;
}
if (sendRedirect(result)){
return new Result("redirect");
}
>>>>>>> Temporary merge branch 2
=======
if ( result.getId() != null )
{
object = new SomeObject(searchResult.getId()) ;
}
>>>>>>> theirs
这个for (int y = 0 ; y < 6; y++)
for (int x = 0; x < 4; x++)
声明在哪里你必须定义它以比较你的数组,否则你会不断收到错误
你伪造一个基于1的数组,你不应该这样做。这会导致许多问题并浪费内存。为什么要制作无用的元素,如果你有一个1000乘1000的“2d”数组,你会浪费2000个元素。
我会有以下
atsakymai[y]