• Java error! Exception in thread "main" 32

    CarltonBirch Member

    I tried to run program, after first correct output (number 32) , I get this:

    Exception in thread "main" 32
    java.lang.IndexOutOfBoundsException: Index: 6, Size: 6
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at Rad.out(Rad.java:44)
    at Rad.main(Rad.java:25)
    

    I think that I attempting to access an index that doesn’t currently exist in the ArrayList.
    How to fix this problem in code?

    import java.util.*;
    public class Rad {
    public static ArrayList heap = new ArrayList();
    public static Scanner cin = new Scanner(System.in);
    public static void main(String[] args)
    {
    heap.add(0);
    int n,x;
    n = cin.nextInt();
    for (int i = 0;i < n;i++)
    {
    x = cin.nextInt();
    ubaci(x);
    }
    int m,y;
    m = cin.nextInt();
    for (int i = 0;i < m;i++) {
    
    y = cin.nextInt();
    if (y == 0)
    {
    if (heap.size() > 1)
    {
    System.out.println(heap.get(1));
    izvadi();
    }
    else
    
    System.out.println("Nema!");}
    else
    ubaci(y);
    }
    System.exit(0);}
    public static void ubaci(int x) {
    heap.add(x);
    int t = heap.size()-1;
    while (((t/2)!=0) && heap.get(t)>heap.get(t/2)){
    int temp = heap.get(t/2);
    heap.set(t/2, heap.get(t));
    heap.set(t, temp);
    t/=2;
    }
    }
    public static void izvadi() {
    heap.set(1, heap.get(heap.size()));
    heap.remove(heap.size());
    int t = 1, r;
    while(true) {
    if (t*2+1 < heap.size()) {
    if(heap.get(t*2) > heap.get(t*2+1))
    r = t*2;
    else
    r = t*2+1;
    } else if(t*2 < heap.size())
    r=t*2;
    else
    break;
    
    if(heap.get(r) > heap.get(t)) {
    int temp = heap.get(t);
    heap.set(t, heap.get(r));
    heap.set(r, temp);
    t = r;
    } else
    break;
    
    }
    }}
    
    Input:
    5
    15 32 4 18 29
    12
    0 0 50 0 24 97 0 0 0 0 0 0
    Print:
    32 29 50 97 24 18 15 4 No
    

    When input is 0, output is largest number in heap.If input is some other number,then it is stored in heap.

  • ShikhaTan Member

    Accessing the # element that doesn’t exist because of the size() method. Size() method brings the actual size of the heap.

    EX: You add 3(a,b,c) items their positions are the following 0 = a, 1 = b, 2 = C. When you heap.get(heap.size()) you are accessing the element in position 3 which doesn’t exist. You must call

    heap.set(1, heap.get(heap.size() - 1));
Viewing 1 reply thread
  • You must be logged in to reply to this topic.