Really confused.. could someone give me an idiot's explanation? Other people weren't able to help and honestly, it seems to me that this code should work fine and it is kind of pissing me off, why can't i set result.num with the int three variable? i have the same result.num.set(0,three) line in another method and it works perfectly
I'm not really sure why I keep getting this error message. I'm trying to add int three to result. I don't understand why it doesn't let me do this, it seems result would be empty when I try to put three into index size1-1.
Error message: (Lines 452, 423, 11 are marked)
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)
Portion of BigInt class:
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; }
Main class:
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); } }