Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    Errore in esecuzione: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcep

    Sto realizzando una banale applicazione per prendere dimestichezza con Java, tuttavia nonostante compili senza errori quando la eseguo mi restituisce un errore. Lo scopo del programma è quello di creare un mazzo di carte, stamparlo e mescolarlo...

    Questo è il codice che è composto da tre classi: Carta, Mazzo e Test.
    codice:
    //Carta.java
    public class Carta{
    	private String seme;
    	private String valore;
    	
    	//costruttori
    	public Carta(){
    		seme = "?";
    		valore = "?";
    	}	
    	public Carta(String semeCarta, String valoreCarta){
    		seme = semeCarta;
    		valore = valoreCarta;
    	}
    	
    	//metodi set/get
    	public String getSeme() {return seme;}
    	public String getValore() {return valore;}
    	
    	//metodi stampa
    	public void stampa(){
    		System.out.print(valore + " di " + seme);
    	}
    	public void stampaln(){
    		System.out.println(valore + " di " + seme);
    	}
    }
    codice:
    //Mazzo.java
    public class Mazzo{
    	final int NUMERO_CARTE = 52;
    	private Carta[] mazzo;
    	
    	//costruttori
    	public Mazzo(){
    		String[] seme = {"Cuori", "Mattoni", "Picche", "Fiori"};
    		String[] valore = {"Asso", "Due", "Tre", "Quattro", "Cinque", 
    						   "Sei", "Sette", "Otto", "Nove", "Dieci",
    						   "Jack", "Donna", "Regio"};
    		
    		mazzo = new Carta[NUMERO_CARTE];
    		for(int i=0; i<NUMERO_CARTE; i++)
    			mazzo[i] = new Carta(seme[i%13], valore[i/13]);
    	}
    
    	//metodi stampa
    	public void stampa(){
    		System.out.println("Mazzo di carte:");
    		for(int i=0; i<NUMERO_CARTE; i++)
    			mazzo[i].stampaln();
    	}		
    }
    codice:
    //Test.java
    public class test{
    	public static void main(String[] Args){
    		Mazzo mazzoCarte = new Mazzo();
    		mazzoCarte.stampa();
    	}
    }
    L'errore che mi restituisce in fase di esecuzione è il seguente:
    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    	at Mazzo.<init>(Mazzo.java:14)
    	at test.main(Test.java:3)
    Grazie in anticipo per l'aiuto.

  2. #2
    Forse hai problemi nel riempimento dell'array. Stai cercando di prelevare un elemento che non esiste ( ArrayIndexOutOfBoundsException: 4 )

    Fai un debug sui cicli e visualizza i valori che carichi.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Errore in esecuzione: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcep

    Originariamente inviato da Pacio88
    mazzo[i] = new Carta(seme[i%13], valore[i/13]);
    Vedi parte in rosso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Se non ho capito male è come se stessi accedendo ad un array di dimensione 4 al quinto elemento ovvero quello indicizzato con il valore 4, vero?

    Però se fosse così non comprendo come sia possibile dato che 0-52 % 13 può avere come risultati valori compresi tra 0 e 3.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Errore in esecuzione: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcep

    Originariamente inviato da Pacio88
    codice:
    		for(int i=0; i<NUMERO_CARTE; i++)
    			mazzo[i] = new Carta(seme[i%13], valore[i/13]);
    Vuoi fare le cose semplici? Fai un doppio ciclo for annidato, uno per il seme, l'altro per il valore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Sì sicuramente farò così, però siccome quello che mi interessa non è lo sviluppo del programma, che ha soltanto un fine didattico ci tenevo a capire perchè succedeva questo.

    P.S. non so come usare un debugger, non è che avete una guida da suggerirmi per imparare? Grazie

  7. #7
    Originariamente inviato da Pacio88
    P.S. non so come usare un debugger, non è che avete una guida da suggerirmi per imparare? Grazie
    Basta usare netbeans e segnare i punti di interruzione.

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Originariamente inviato da Pacio88
    Però se fosse così non comprendo come sia possibile dato che 0-52 % 13 può avere come risultati valori compresi tra 0 e 3.
    Potrebbe essere che stia impazzendo, ma a me risulta che x % 13, con x da 0 a 52, possa dare come risultati 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 1, 2, ....
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #9
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Ma scusa l'operatore % non restituisce il resto di una divisione?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pacio88
    Ma scusa l'operatore % non restituisce il resto di una divisione?
    Si appunto ... ma se vuoi farlo con 1 solo ciclo for "dividendo" in due il valore della 'i' dovresti fare:

    mazzo[i] = new Carta(seme[i/13], valore[i%13]);

    Questo è giusto!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.