【问题标题】:I am working with the Luhn Algorithm in Java for eimacs我正在为 eimacs 使用 Java 中的 Luhn 算法
【发布时间】:2023-03-22 07:00:01
【问题描述】:

这是针对我的 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;
}

我做错了什么。这是即将出现的错误

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 4

在 TC1.work(TC1.java:24)

在 TC1.main(TC1.java:12)

【问题讨论】:

  • 解决此类问题的第一条规则是在 IDE 调试器中单步执行程序。您将了解程序的实际行为方式,并且问题会很明显。

标签: java algorithm luhn


【解决方案1】:

这是问题的症结:

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] 出现在代码中的几个不同位置;确保纠正每个出现的问题。

【讨论】:

  • 这几乎就是我所做的。在和老师聊了一会儿之后,我意识到自己做错了什么,并想出了我刚刚发布的答案
【解决方案2】:

d[d.length - i]

i = 0 的所有情况下,您都会收到此错误,因为数组从 0 开始并上升到 array.length - 1

您可以通过 d[d.length - i - 1] 纠正此问题

【讨论】:

    【解决方案3】:
     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;
    }
    

    好的,所以我用稍微不同的输入重试了代码,效果很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2014-12-25
      • 2014-02-10
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多