Progetto - indovina codice numerico

di il
4 risposte

Progetto - indovina codice numerico

Buonasera a tutti
Mi sto addentrando nella programmazione Java da qualche settimana e ora mi trovo bloccato su di un esercizio al quale non trovo risposta.
Al momento conosco solo le strutture decisionali e i cicli, chiedo a voi un suggerimento per risolvere questo progetto.
Chiedo scusa nel caso non utilizzassi termini appropriati.
/* si scriva un algoritmo per un semplice gioco che chieda di indovinare un codice numerico di 5 cifre. quando l'utente scrive la 
* risposta, il programma restituisce due valori: il numero di cifre al posto giusto e la somma di queste cifre. per esempio, se il codice 
* segreto è 53840 e l'utente ipotizza 83241, le cifre 3 e 4 sono al posto giusto. il programma perciò restituisce in output i numeri 2 (cifre 
*/ corrette) e 7 (somma). si permetta all'utente di provare per un numero prefissato di volte.
Ho deciso di frammentare la variabile intera in decimali così da eseguire un costrutto if-else, mi accorgo però che per restituire l'output richiesto non è ottimale/funzionale. Non so dove sbattere la testa.
Non conoscendo ancora il metodo .Math il codice è fisso.
			int sequenza = tastiera.nextInt();
				int codice = 49653;
				int c1, c2, c3, c4, c5, s1, s2, s3, s4, s5;
				
				c1 = codice / 10000;        // 4
				c2 = (codice / 1000) % 10;  // 9
				c3 = (codice / 100) % 10;   // 6
				c4 = (codice / 10) % 10;    // 5
				c5 = codice  % 10;          // 3
				
				s1 = sequenza / 10000;      
				s2 = (sequenza / 1000) % 10;
				s3 = (sequenza / 100) % 10; 
				s4 = (sequenza / 10) % 10;  
				s5 = sequenza % 10;
				
					
					
					for (int tentativo = 3; tentativo > 1; tentativo--)	{
						if ((sequenza) == (codice)) {
							System.out.println("you win");
							break;
						}
							//  ???
							
						sequenza = tastiera.nextInt();
						
					}       				
			
	}

}

4 Risposte

  • Re: Progetto - indovina codice numerico

    Ndr_ ha scritto:


    Ho deciso di frammentare la variabile intera in decimali così da eseguire un costrutto if-else, mi accorgo però che per restituire l'output richiesto non è ottimale/funzionale. Non so dove sbattere la testa.
    Non conoscendo ancora il metodo .Math il codice è fisso.
    Ok, quello che hai fatto non è completamente sbagliato ma è solo da sistemare meglio e in modo più logico.

    All'inizio va bene tenere la variabile con il numero da indovinare e le 5 variabili per le cifre (ciò che tu hai chiamato codice e c1 .... c5). Diciamo che per le cifre sarebbe meglio (ai fini dell'analisi da fare) usare un array ma non so se li conosci e se potresti usarli.

    Quindi fai il ciclo per gli N tentativi. All'interno del ciclo, segui bene, dovresti fare così:
    a) innanzitutto chiedi il numero in input.
    b) se il numero in input è già uguale a quello "segreto", l'utente ha indovinato. Non c'è da fare altro e puoi terminare il ciclo.
    c) altrimenti spezzi in cifre il numero inserito e inizi a fare l'analisi tra le cifre. Ti serviranno due variabili, una di "contatore" e l'altra di "somma".
  • Re: Progetto - indovina codice numerico

    Grazie per il suggerimento, ora ho risolto in gran parte, ma ho ancora un dubbio:
    il primo tentativo va a buon fine, indica la conta dei numeri esatti e calcola la somma di questi ultimi. Dal tentativo successivo il processo non si ripete, tiene in memoria il precedente e visualizza lo stesso risultato non tenendo conto del nuovo input.
    Ho bisogno nuovamente di un aiuto, non ne vengo a capo.
    int sequenza = tastiera.nextInt();
    				int codice = 49653;
    				int c1, c2, c3, c4, c5, s1, s2, s3, s4, s5;
    				
    				c1 = codice / 10000;        // 4
    				c2 = (codice / 1000) % 10;  // 9
    				c3 = (codice / 100) % 10;   // 6
    				c4 = (codice / 10) % 10;    // 5
    				c5 = codice  % 10;          // 3
    				
    				s1 = sequenza / 10000;      
    				s2 = (sequenza / 1000) % 10;
    				s3 = (sequenza / 100) % 10; 
    				s4 = (sequenza / 10) % 10;  
    				s5 = sequenza % 10;
    				
    				int contatore = 0;
    				int somma = 0;
    					
    					for (int tentativo = 3; tentativo > 0; tentativo--)	{
    						if ((sequenza) == (codice)) {
    							System.out.println("you win");
    							break;
    						}
    						
    				if (s1 == c1) {
    					contatore = 1;
    					somma = c1;
    					}
    				if (s2 == c2) {
    					contatore = contatore + 1;
    					somma = somma + c2;
    					}
    				if (s3 == c3) { 
    					contatore = contatore + 1;
    					somma = somma + c3;
    					}
    				if (s4 == c4) {
    					contatore = contatore + 1;
    					somma = somma + c4;
    					}
    				if (s5 == c5) {
    					contatore = contatore + 1;
    					somma = somma + c5;
    					}
    				
    				
    				
    				System.out.println(contatore + " cifra/e corretta/e in posizione esatta, "
    						+ "somma uguale a: " + somma);			
    							
    							
    		
    							System.out.println("hai ancora " + tentativo + " tentativi");
    						sequenza = tastiera.nextInt();
    						
    					} System.out.println("hai perso!");      				
    			
    	}
    
    }
    
  • Re: Progetto - indovina codice numerico

    Ndr_ ha scritto:


    Grazie per il suggerimento, ora ho risolto in gran parte, ma ho ancora un dubbio:
    A dire il vero, scusa se te lo dico, hai sì risolto qualcosa ma l'approccio/concetto non è affatto quello giusto e sensato.

    Molto (MOLTO) abbozzato:
    int codice = .....
    
    int c1 = ...
    .....
    int c5 = .....
    
    
    for ( ... per tentativi ... ) {
        int sequenza = .......leggi da Scanner
    
        if (sequenza == codice) {
            // qui ha vinto, puoi uscire dal ciclo
        } else {
            // NOTA: qui sei sempre nel ciclo e devi "spezzare" in cifre l'input
            int s1 = ....
            ......
            int s5 = ....
    
            int contatore = 0;
            int somma = 0;
    
            // ora confronti c1 con s1 / c2 con s2 / ecc....
            //    se un cX è uguale a sX allora aggiorni un contatore e una somma
    
            // stampi le info all'utente affinché possa comprendere e ritentare (sei ancora nel ciclo infatti!)
        }
    }
    Ti è più chiaro ora? Comprendi come questo sia abbastanza diverso dal tuo?
  • Re: Progetto - indovina codice numerico

    Dovrò studiare ancora per molto prima di apprendere il giusto approccio alla compilazione del codice. Al momento, anche grazie ai tuoi suggerimenti, ho risolto il progetto.
    Mi sei stato di notevole aiuto. Ancora grazie.
Devi accedere o registrarti per scrivere nel forum
4 risposte