2013-11-10 7 views
0

Я не совсем уверен, почему я продолжаю получать это сообщение об ошибке. Я пытаюсь добавить int three, чтобы результат. Я не понимаю, почему это не позволяет мне делать это, кажется, результат будет пустым, когда я попытаюсь поместить три в индекс size1-1.Исключение из потока «main» java.lang.IndexOutOfBoundsException: Index: 1, Size: 0

Сообщение об ошибке: (строки 452, 423, 11 отмечены)

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 
at java.util.ArrayList.rangeCheck(Unknown Source) 
at java.util.ArrayList.set(Unknown Source) 
at BigInt.singleDigitMultiply(BigInt.java:452) 
at BigInt.multiply(BigInt.java:423) 
at Dem.main(Dem.java:11) 

Порция класса BigInt:

public BigInt multiply(BigInt B2) { 
BigInt result = new BigInt(); 
BigInt B1 = this; 
result = singleDigitMultiply(B1,B2); Line 423 
    return result; 

} 

private BigInt singleDigitMultiply(BigInt B1, BigInt B2) { 
    int size1 = B1.num.size(), size2 = B2.num.size(); 
    BigInt result = new BigInt(); 
    //result.num = new ArrayList (Collections.nCopies(size1+1, null)); 
    boolean carryover = false; 
    int one, two, three, four, five, carry; 
    for (int i = size1-1; i >= 0; i--) { 

     one = B1.num.get(i); 
     two = B2.num.get(0); 

     int prod = B1.num.get(i) * B2.num.get(0); 
     int prodInt = prod/10; 
     if (prod > 9) carryover = true; 

     if (i == size1-1) { 

     if (carryover) { 
     three = prod % (prodInt * 10); 
     } 
     else { 
      three = prod; 
     } 

    System.out.println(result.num.set(size1-1,three));   Line 452 
     } 

    // else { 
     // four = B1.num.get(i+1) * two; 
    //  carry = four % (four - prodInt); 
    //  if (four > 9) { 
    // 
    //  five = prod + carry; 
    //  three = five % (prodInt * 10); 
    //  } 
    //  else { 
    //   three = prod; 
    //  } 
     // result.num.add(i,three); 
    // } 




    } 

    return result; 
} 

Основной класс:

public class Dem { 
public static void main(String[] args) { 
BigInt B1 = new BigInt("55"); 
BigInt B2 = new BigInt("1"); 
BigInt D = new BigInt(); 
int u = 8; 
int j = 10; 

//BigInt J = new BigInt("u"); 
D = B1.multiply(B2);   Line 11 
System.out.println(u/j); 
} 
} 

ответ

0

Проблема заключается в том, что вы, вероятно, не установили result.num еще в точке, в которой вы пытаетесь получить доступ к этому значению, поэтому вам стоит запустите его в любой точке, либо в методе singleDigitMultiply(...), либо в конструкторе BigInt, но перед чтением значения.

+0

im not sure Я понимаю, что вы говорите ... настройка result.num? как я могу установить значения, которые я хочу в нем, прежде чем у меня будет правильное значение? – user2977267

+0

Я имею в виду, что этот код не будет работать, потому что result.num никогда не получает значения, поэтому вы получите исключение Null Pointer в result.num.set (...), но я предполагаю, что это просто вы сделали включите его или забудьте добавить его. –

+0

Как он не получает значение? Я пытаюсь установить int three в index size1-1. У меня есть другой метод, в котором это работает отлично. Благодарю. – user2977267

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