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

    [java] Errore sconosciuto, parte 2

    Bene, anzi male...Risolvo un problema ma se ne crea un altro

    java.lang.ArrayIndexOutOfBoundsException: 9
    at Mazzo.scegliCartadaScartare(Mazzo.java:173)
    at Mazzo.pescaCarta(Mazzo.java:97)
    at Giocatore.run(Giocatore.java:28)

    Sapete che vuol dire?
    Il programma funziona bene, i vari giocatori si alternano e eseguono la propria mano(prelevare la carta in testa al mazzo, verificare se hanno tutte carte dello stesso seme, e scartarne una che non sia del seme maggioritario nella mano), poi dopo una 20ina di giocate parte questo errore...
    Con lo stesso codice, senza l' inserimento da tastiera dei giocatori il problema non sussiste...
    Sapete darmi una spiegazione sul significato dell' errore e su modalità di risoluzione dello stesso?

  2. #2
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Semplicemente che hai sfondato l'array
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  3. #3
    Quote Originariamente inviata da Marlene
    che l'oggetto su cui stai facendo un ciclo è nullo o non valorizzato, mentre tu hai dato per scontato che lo è e ci hai lavorato su... mi pare che il caso sia questo... hai controllato il null della prima parte?
    Potrebbero essere collegate le due cose
    Allora ti dico a cosa si riferiscono le 3 segnalazioni..

    at Mazzo.scegliCartadaScartare(Mazzo.java:174)
    codice:
    while(manoGiocatore[cartadaScartare]==massimo && cartadaScartare<N_CARTE_GIOCATORE+2)
    avendo scritto alla riga 173
    codice:
    int cartadaScartare=0;
    ---------------------------------------------------------------------
    at Mazzo.pescaCarta(Mazzo.java:98)
    codice:
    cartaScartata =scegliCartadaScartare(manoGiocatore);
    avendo scritto alla riga 97
    codice:
    int cartaScartata=0;
    ----------------------------------------------------------------------
    at Giocatore.run(Giocatore.java:28)
    [CODEe]controllo_vincitore = mazzo.pescaCarta(numGiocatore,manoGiocatore);[/CODE]

    avendo scritto alla riga 24
    codice:
    boolean controllo_vincitore =false;
    ----------------------------------------------------------------------

    La mie domande sono:
    1)Dove sono gli errori?
    2)Perché lo stesso codice senza l' opzione di inserire il numero di giocatori da tastiera non crea questi problemi?
    3) Cosa vuol dire java.lang.ArrayIndexOutOfBoundsException: 9
    A cosa si riferisce quel nove?
    Forse al numero di carte nella mano (effettivamente sono 9) ?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    PRova a invertire la condizione all'interno dei while:
    codice:
    while(cartadaScartare<N_CARTE_GIOCATORE+2 && manoGiocatore[cartadaScartar
    e]==massimo)
    Questo perchè devi verificare prima che l'indice non sfondi l'array e solo dopo che l'altra condizione sia valida.
    In questo modo, infatti, se la prima condizione è falsa, il ciclo while termina senza controllare la seconda, che sfonderebbe l'array!

    Io, generalmente, per prevenire errori di questo tipo, effettuo le due cose in costrutti diversi: il while lo comando con la prima condizione (l'array non deve essere sfondato), mentre la seconda condizione la faccio controllare ad un'istruzione if all'interno del while.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.