Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378

    [java] - ricorsione su array bidimensionale

    Salve,
    stò cercando di capire l'errore su questo metodo che dovrebbe stampare un "." sulle caselle adiacenti di una griglia composta da 2 caratteri.


    la prima chiamata va a buon fine,ad esempio dandogli le coordinate 3,1:

    -------------------------------------
    X O O O X O X
    O X X "X" X X O
    X O X X X X X

    -------------------------------------

    con il mio metodo stampa:

    -------------------------------------
    X O O O X O X
    O X . . . X O
    X O X . X X X

    -------------------------------------

    io invece dovrei fare in modo che la griglia venga aggiornata cosi:

    -------------------------------------
    X O O O . O X
    O . . . . . O
    X O . . . . .

    -------------------------------------

    il metodo che ho creato è questo:

    codice:
    public void adiacenza(int x, int y){
            boolean carattereSingolo = true;
    	for (int i = 0; i < l; i++){
    		for (int j = 0; j < h; j++){
    		
    		if (campo[i][j] == campo[y][x] && (j == x && Math.abs(i - y) == 1 || i == y && Math.abs(j - x) == 1)){
    
    		   campo[i][j] = '.'; 
    
                        carattereSingolo = false;}
    
                    }	
                
            }
    
                    if (!carattereSingolo){
                    campo[y][x] = '.';
    
    
                      }
    
    
    }
    come creare una ricorsione che non faccia scoppiare tutto??

    ho provato a richiamare adiacenza(j,i) nell'if ma il problema sta nel fatto che il valore su quegli indici che ho appena inserito vengono aggiornati con il "." prima del nuovo controllo sulla variabile di esemplare campo,come posso fare?

    :berto:

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Io non ho capito niente
    Vediamo se formattando si vede meglio....

    codice:
    X O O O X O X
    O X X X X X O
    X O X X X X X
    
    
    
    X O O O X O X
    O X . . . X O
    X O X . X X X
    
    
    
    X O O O . O X
    O . . . . . O
    X O . . . . .
    Da dove arriva l'ultimo schema? Qual è la regola di sostituzione? Non dovresti avere una cosa del genere piuttosto?
    codice:
    X O O . X O X
    O X . . . X O
    X O X . X X X
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ah, ho capito, togli tutte le X a 2 unità o meno di distanza... giusto?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    Originariamente inviato da Andrea1979
    ah, ho capito, togli tutte le X a 2 unità o meno di distanza... giusto?

    no,toglie tutte le X o qualsiasi altro carattere che si trovi sulle coordinate passate e che abbia almeno una casella adiacente...

    ecco l'espressione solo per l'adicenza tra caselle con qualsiasi valore al loro interno:

    codice:
    (j == x && Math.abs(i - y) == 1 || i == y && Math.abs(j - x) == 1)
    in pratica il mio metodo sotituisce solo i caratteri adiacenti alla coordinata inserita ma non esiste ricorsione per controllare se le caselle adiacenti a quelle sotituite abbiano altri caratteri uguali e adiacenti.
    io ho provato ma incorro sempre a problemi criguardanti l'uscita dalla griglia di gioco.
    come posso fare?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    nessuno riesce a darmi qualche dritta?

  6. #6
    Per caso quello che stai facendo è il SameGame da fare x un esame? xke lo sto facendo anche io...cmq io ho risolto rilanciando il metodo fino a quando ci sono pedine uguali a quella selezionata con le coordinate...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    Originariamente inviato da Paul16
    Per caso quello che stai facendo è il SameGame da fare x un esame? xke lo sto facendo anche io...cmq io ho risolto rilanciando il metodo fino a quando ci sono pedine uguali a quella selezionata con le coordinate...
    ovvero??

  8. #8
    ovvero se rilanci il metodo su tutte le pedine uguali alla fine ti lascia solo quelle diverse...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    Originariamente inviato da Paul16
    ovvero se rilanci il metodo su tutte le pedine uguali alla fine ti lascia solo quelle diverse...
    mi potresti postare un qualche pseudocodice per capire quello che dici,perchè quello che dici io già l ho provato ma senza buoni risultati..

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    ecco cosa mi succede su questo codice se faccio la ricorsione:

    codice:
    public void adiacenza(int x, int y){
            boolean carattereSingolo = true;
    	for (int i = 0; i < l; i++){
    		for (int j = 0; j < h; j++){
    		
    		if (campo[i][j] == campo[y][x] && (j == x && Math.abs(i - y) == 1 || i == y && Math.abs(j - x) == 1)){
    
    		   campo[i][j] = '.'; 
    
                        carattereSingolo = false;}
                     adiacenza(j,i);
    
                    }	
                
            }
    
                    if (!carattereSingolo){
                    campo[y][x] = '.';
    
    
                      }
    codice:
    guest@localhost Desktop]$ java GrigliaTester
    Exception in thread "main" java.lang.StackOverflowError
            at java.lang.Math.abs(Math.java:713)
            at Griglia.adiacenza(Griglia.java:65)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)
            at Griglia.adiacenza(Griglia.java:70)

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.