Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在为EIMAC使用Java中的Luhn算法_Java_Algorithm_Luhn - Fatal编程技术网

我正在为EIMAC使用Java中的Luhn算法

我正在为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 ) {

这是给我的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 )
    {
        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;
}