Program sortujący błąd insert

0
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package selectionsortapp;



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import java.lang.Math;


public class  SelectionSortApp
{
	public static void main(String[] args) throws IOException
	{
		int i;
		int c = Integer.parseInt(getInput());
		int a[] = new int [c];
		
		Random rand = new Random();
		
		
		
		
		/*
		 * 0 - zamiany
		 * 1 - porownania
		 * */
		int[] wyniki = new int[2];
		
		SelactioSort h = new SelactioSort(wyniki, c);
		
		
		for ( i=0; i< c; i++)
		{
			int r = rand.nextInt(255);
			h.insert(r); // dodaj r do kopca
		}

		a = h.getTablica();
		
		System.out.println("Nieposortowana tablica ");
		for (i = 0; i < a.length; i++)
			System.out.print(" "+a[i]);
		
		
		h.Sort();
		
		
		
		
		
		System.out.println("\nposortowana tablica");
		
		for (i = 0; i < a.length; i++)
			System.out.print(" "+a[i]);
		
		// zlozonosc jest dziwnie wyliczana, bo maleje wraz ze wzrostem 
		System.out.println("\nZamiany: " + wyniki[0]+   ", porownania: " +wyniki[1]+  ", zlozonosc: "+ wyniki[0]/((c*(Math.log(c))/Math.log(2)))  + "\n");// złozonsc

	}

	public static String getInput()
	{
		try
		{
			BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
			String s = bufferRead.readLine();               
			return s;
		}
		catch(IOException e)               
		{
			e.printStackTrace();
			return "";
		}
	}


\\\------------------------------------------------------------------------------------------------------------------

package selectionsortapp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import java.lang.Math;


class SelactioSort
   {
   private int[] a;                 // referencja do tablicy
   private int nElems;               // licznik elementów
   public int porow, przes;
   private int[] wyniki;
//--------------------------------------------------------------
   public SelactioSort(int[] wyniki, int rozmiar)          // konstruktor
      {
      this.wyniki = wyniki; // przypisuje referencje do 'wyniki' z metody main
		//a = tablica; // tablica do posortowania
		nElems = rozmiar;
		a = new int[nElems];
   }
   public int[] getTablica()
	{
		return a;
	}
//--------------------------------------------------------------
   public void insert(int value)    // wstawienie elementu do tablicy
      {
      a[nElems] = value;             // wstawiamy element
      nElems++;                      // zwiększamy licznik elementów
      }
//--------------------------------------------------------------
   public void display()             // wypisuje zawartość tablicy
      {
      for(int j=0; j<nElems; j++)       // dla każdego elementu...
        { System.out.print(a[j] + " ");  // ...wypisujemy jego wartość
          if ((j+1) % 10 == 0)           // po 10 elementow w wierszu
            System.out.println("");
        }    
      System.out.println("");
      }
//--------------------------------------------------------------
   public void bubbleSort()
      {
      int out, in;

      for(out=nElems-1; out>=1; out--)   // pętla zewnętrzna (malejąca)
         for(in=0; in<out; in++)        // pętla wewnętrzna (rosnąca)
         {
            porow ++;                   // zwiększa liczbę porównań
            if( a[in] > a[in+1] )       // zła kolejność?
               swap(in, in+1);   }      // no to zamiana
      }  // koniec bubbleSort()
//--------------------------------------------------------------
   private void swap(int one, int two)
      {
      int temp = a[one];
      a[one] = a[two];
      a[two] = temp;
      przes ++;
      }
//--------------------------------------------------------------
  public void Sort()
      {
      int out, in, min;

      for(out=0; out<nElems-1; out++)   // pętla zewnętrzna
         {
         min = out;                     // indeks minimum
         for(in=out+1; in<nElems; in++) // pętla wewnętrzna
           { porow ++;                  // zwiększa liczbę porównań
           	 if(a[in] < a[min] )        // jeżeli min większe...
                min = in;               // ...mamy nowe minimum
           }
         swap(out, min);                // zamiana
         }  // koniec pętli zewnętrznej
      }  // koniec selectionSort()
  
       
   }  // koniec klasy arraySort                              
}

Mam taki błąd co jest może nie tak

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at selectionsortapp.SelactioSort.insert(SelactioSort.java:34)
at selectionsortapp.SelectionSortApp.main(SelectionSortApp.java:41)
Java Result: 1

1

Ok, tworzysz tablicę n-elementową, załóżmy pięcio elementową.
W konstruktorze SelectionSort tworzysz tablicę o rozmiarze 5 czyli z indeksami [0,1,2,3,4]
Następnie wypełniając tablicę próbujesz przy pierwszej itreacji wpakowac wartość r do piątego elementu tablicy, którego nie ma.
W mainie proponuje:

                for ( i=0; i< c; i++)
                {
                        int r = rand.nextInt(255);
                        h.insert(r,i); // dodaj r do kopca
                }

Natomiast metoda insert():

 public void insert(int value, int index)    // wstawienie elementu do tablicy
      {
      a[index] = value;             // wstawiamy element
      }

1 użytkowników online, w tym zalogowanych: 0, gości: 1