Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    MergeSort??

    Ho realizzato un classe statica che contiene vari metodi di ordinamento tra cui anche il MergeSort così realizzato:

    codice:
    // Metodi di utilita' su array.
    
    public class ArrayUtils { 
    
    [...]
        	
        	public static void mergeSort(int[] a, int primo, int ultimo){
        		int mezzo;
        		if(primo<ultimo){
        			mezzo = (primo+ultimo)/2;
        			mergeSort(a, primo, mezzo);
        			mergeSort(a, mezzo+1, ultimo);
        			merge(a, primo, ultimo, mezzo);
        		}//if
        	}//mergeSort
            
            private static void merge(int[] a, int primo, int ultimo, int mezzo){
            	//indici
            	int i,j,k,h;
            	//array di appoggio
            	int[] b = new int[a.length];
            	 i=primo;
            	 j=mezzo+1;
            	 k=primo;
            	 while((i<=mezzo)&&(j<=ultimo)){
            	 	if(a[i]<=a[j]){
            	 		b[k]=a[i];
            	 		i++;
            	 	}else{
            	 		b[k]=a[j];
            	 		j++;
            	 	}//else
            	 	k++;
            	 }//while
            	 j=k;
            	 for(h=i; h<mezzo; h++){
            	 	a[j]=a[h];
            	 	j++;
            	 }//for
            	 for(j=primo; j<(k-1); j++){
            	 	a[j]=b[j];
            	 }//for
            }//merge
        
    }//ArrayUtils
    ed ovviamente ho realizzato anche una classe per testare i metodi:

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    import java.text.*;
    
     class ArrayUtilsTest {
    
    
      public static void main(String argv[]) {
      
      	//metodo per leggere un numero corretto da input
            Integer i;
            //numero elementi
            int Num;
            //indice
            int index;
            //lista di numeri interi;
            int[] list;
            
            while (true){
                try {
                    String numero = JOptionPane.showInputDialog(null,"Inserisci la quantità di elementi.");
                    i = new Integer(numero);
                    break;
                } catch (NumberFormatException ex) { 
                	JOptionPane.showMessageDialog(null,"Devi inserire un numero intero!");
                }//catch
            }//while
            
            //converte un numero oggetto Integer in un numero intero
            Num = i.intValue();
            list = new int[Num];
            
      	for(index=0; index<Num; index++){
      		while (true){
                        try {
                            String numero = JOptionPane.showInputDialog(null,"Inserisci un numero intero.");
                            i = new Integer(numero);
                            break;
                        } catch (NumberFormatException ex) { 
                        	JOptionPane.showMessageDialog(null,"Devi inserire un numero intero!");
                        }//catch
                    }//while
                    list[index] = i.intValue();
      	}//for
      	ArrayUtils.mergeSort(list,0,list.length);
      	ArrayUtils.print(list);
            
      }//main
      
    }//ArrayUtilsTest
    ma quando vado ad eseguire il codice ho il seguente messaggio di errore:

    codice:
    C:\Programmi\Java\jdk1.5.0_09\bin\javaw.exe -classpath "C:\Documents and Settings\Giuseppe\Documenti\Java Source\ArrayUtilis" ArrayUtilsTest
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    	at ArrayUtils.merge(ArrayUtils.java:173)
    	at ArrayUtils.mergeSort(ArrayUtils.java:160)
    	at ArrayUtils.mergeSort(ArrayUtils.java:159)
    	at ArrayUtilsTest.main(ArrayUtilsTest.java:49)
    Process ArrayUtilsTest interrupted
    la riga incriminata è la seguente:

    codice:
    if(a[i]<=a[j]){
    Come è possibile una cosa del genere?
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    controlla gli indici stai andando a prendere un valore che sta al di fuori del limite degli array

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.