Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problema con if

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    14

    problema con if

    ciao a tutti, avrei un problema con un ciclo if.

    ho un oggetto (nave) composto da quattro pezzi(o caselle).

    codice:
    if(	campoDaGioco[indiceRiga][indiceColonna] ==1){
         //sostituisco l'1 della nave con un 6.
    			campoDaGioco[indiceRiga][indiceColonna] = 6;
    		  //inizializzo una variabile contatore h_6;
    			//ho inizializzato fuori dall if--> int h_6=0;
    			h_6=h_6+1;
    			if (h_6<4){
    			System.out.println("Colpita!Ma non mi hai affondata!");	
    			}
    			else if(h_6==4){	
    			System.out.println("Colpita e affondata!");
    			}
    		}
    il problema è che mi restituisce colpita ma non affondata per 4 volte(quando invece alla 4 volta dovrebbe dirmi colpita e affondata), e se (la 5° volta) gli ridò la posizione dell'ultima casella, il programma non mi risponde, ma prosegue ripetendomi l'struzione della riga come se nulla fosse.
    Non capisco dove sbaglio.

    Grazie a quanti mi aiuteranno.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Java viene trattato nel forum Java.

    Sposto.


    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

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Da questo commento
    codice:
    //ho inizializzato fuori dall if--> int h_6=0;
    Deduco che ogni volta crei una nuova variabile h_6, la inizializzi a 0 e poi, se l'if è soddisfatto la incrementi di uno... ma avendola, appunto, inizializzata a 0, al massimo varrà sempre 1 e mai 2, 3 o 4.

    Verifica che il problema sia effettivamente questo (l'inizializzazione di tale variabile va fatta una sola volta, in questo caso, non ogni volta).

    Eventualmente, se non è così, posta un po' più di codice così capiamo meglio.


    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

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    14
    ciao LeleFT e grazie per la risposta ho provato a spostare l'inizializzazione ma mi da sempre lo stesso problema.
    Posto il metodo (semi)completo (in quanto ho trascurato le altre navi)

    codice:
    public void setColpo(int ColpoRiga, int ColpoColonna) throws Exception {
    			
    			int	indiceRiga= ColpoRiga-1;
    		int indiceColonna= ColpoColonna-1;
    		if (ColpoRiga >= 0 & ColpoRiga <= getRighe() & ColpoColonna >= 0 & ColpoColonna <= getColonne()) {
    		if (campoDaGioco[indiceRiga][indiceColonna] == 0) {
    
    		System.out.println("Acqua, non ci sono navi in questa casella!");
    
    		} else { 
    		if(	campoDaGioco[indiceRiga][indiceColonna] ==1){
    			campoDaGioco[indiceRiga][indiceColonna] = 6;
    		  //inizializzo una variabile contatore h(6);
    			h_6=h_6++;
    			if (h_6<4){
    			System.out.println("Colpita!Ma non mi hai affondata!");	
    			}
    			else if(h_6==4){	
    			System.out.println("Colpita e affondata!");
    			}
    		}

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    La variabile h_6 va dichiarata e inizializzata fuori da quel metodo (magari nel costruttore), altrimenti ricadi sempre nello stesso problema... ogni volta che viene chiamato il metodo setColpo() la variabile viene re-inizializzata a zero e non è ciò che vuoi.

    Dichiara la variabile a livello di classe, inizializzala a 0 nel costruttore. Il metodo setColpo() deve solo controllarla ed, eventualmente, incrementarla.


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    14
    grazie mille, ora va!!!

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.