2014-10-22 2 views
0

Это для моего класса компьютерного программирования AP, и я теряюсь в том, что не так с моим кодом. Мой другой учитель по программированию в основном не видит ничего плохого в моем коде, и я пробовал работать с разными различными наборами кода, но ни у кого нет. Однако этот код, скорее всего, будет работать.Я работаю с алгоритмом Луна в Java для eimacs

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.work (TC1.java:24)

на TC1.main (ТС1. Java: 12)

+0

Первое правило устранения неполадок например, это одноэтапная программа в отладчике IDE. Вы узнаете, как программа действительно ведет себя, и проблема будет очевидна. –

ответ

0

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

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

Когда i является 0, то d.length - 0 равно 4. d[4] есть Inde ed, вне границ.

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

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

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

+0

Это почти то, что я сделал. Я понял, что я делаю неправильно, после немного поговорив с моим учителем и придумал свой ответ, я просто публиковал – Edragongaming

0

d[d.length - i]

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

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

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

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

Смежные вопросы