Я работаю с алгоритмом Луна в Java для eimacs

Это для моего класса AP Computer Programming, и я заблудился из-за того, что не так с моим кодом. Мой другой учитель программирования в основном не видит ничего плохого в моем коде, и я пробовал разные наборы кода для работы, но ни один из них не работает. Этот код, однако, кажется наиболее вероятным для работы.

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)

3 ответа

d[d.length - i]

Во всех случаях, когда i = 0 вы получите эту ошибку, так как массивы начинаются с 0 и доходят до array.length - 1

Вы можете исправить это, выполнив d[d.length - i - 1]

Вот суть проблемы:

if ((d[d.length - i] %10) == 0 )

когда i 0, то d.length - 0 это 4. d[4] действительно, вне границ.

Чтобы исправить это, вы также можете вычесть 1 из d.length, например так:

if ((d[d.length - i - 1] % 10) == 0)
  • Когда i = 0 (самое низкое значение в цикле for), d[3] является действительным
  • Когда i = 3 (наибольшее значение в цикле for), d[0] является действительным

Имейте в виду, что d[d.length - i] появляется в нескольких разных местах в вашем коде; не забудьте исправить каждый случай.

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

Хорошо, поэтому я повторил код с немного другими входами, и он хорошо работал

Другие вопросы по тегам