我正在为EIMAC使用Java中的Luhn算法
这是给我的AP计算机编程课的,我对我的代码出了什么问题感到迷茫。我的另一位编程老师基本上看不出我的代码有什么问题,我尝试过各种不同的代码集,但都没有。然而,这段代码似乎最有可能起作用我正在为EIMAC使用Java中的Luhn算法,java,algorithm,luhn,Java,Algorithm,Luhn,这是给我的AP计算机编程课的,我对我的代码出了什么问题感到迷茫。我的另一位编程老师基本上看不出我的代码有什么问题,我尝试过各种不同的代码集,但都没有。然而,这段代码似乎最有可能起作用 int[] d = {8, 7, 6, 2 }; boolean valid; int sum = 0; int dd; for ( int i = 0; i < d.length; i++ ) { if ((d[d.length - i] %10) == 0 ) {
int[] d = {8, 7, 6, 2 };
boolean valid;
int sum = 0;
int dd;
for ( int i = 0; i < d.length; i++ )
{
if ((d[d.length - i] %10) == 0 )
{
dd = d[d.length - i] * d[d.length - 1];
sum += dd ;
}
else
{
sum += d[d.length - i] ;
}
}
if ( sum %10 == 0)
{
valid = true;
}
else
{
valid = false;
}
我做错了什么。下面是即将出现的错误
主线程java.lang.ArrayIndexOutOfBoundsException中的异常:4
在TC1.workTC1.java:24
在TC1.mainTC1.java:12上,问题的关键在于:
if ((d[d.length - i] %10) == 0 )
当i为0时,则d.length-0为4。d[4]确实是不可能的
要解决此问题,还可以从d.length中减去1,如下所示:
if ((d[d.length - i - 1] % 10) == 0)
当i=0时,for循环中的最低值d[3]有效
当i=3时,for循环中的最高值d[0]有效
请记住,d[d.length-i]出现在代码中的几个不同位置;确保纠正每次出现的错误。d[d.length-i]
在所有情况下,当i=0时,都会出现此错误,因为数组从0开始,一直到array.length-1
您可以通过执行d[d.length-i-1]来更正此问题
好的,我用稍微不同的输入重试了代码,结果很好解决类似问题的第一条规则是在IDE调试器中单步执行程序。您将了解程序的实际运行情况,问题将显而易见。这几乎就是我所做的。在和老师谈了一会儿之后,我意识到我做错了什么,并给出了我刚刚发布的答案
int[] d = {8,7,6,2 };
boolean valid;
int sum = 0;
int dd;
for ( int i = 0; i < d.length; i++ )
{
if ((d.length - i) %2 == 0 )
{
dd = d[i] * 2;
}
else
{
sum += d[i] ;
}
}
if ( sum %10 == 0)
{
valid = true;
}
else
{
valid = false;
}