Programma Indovinare Numero Casuale

di il
8 risposte

Programma Indovinare Numero Casuale

Salve!

Mi sto approcciando per la prima volta al Java, ma sto avendo qualche problemino con il programma in questione.
Una volta inserito il primo tentativo, il programma mi dà l'output corretto, ma poi termina, senza eseguire il ciclo while.

Un aiutino?

Ecco il codice:
import fiji.io.Lettore;
class AltoBasso {
	public static void main (String[] args) {
		int guess,tentativi;
		boolean indovinato;
		indovinato = false;
		tentativi = 0;
		System.out.println("Questo programma genera un numero casuale tra 1 e 100, dandoti poi la possibilità di indovinarlo");
		int NumSegreto = (int) (Math.random()*100 + 1);
		do {
			System.out.println("Inserisci il tuo tentativo. Per arrenderti premi 0");
			guess = Lettore.in.leggiInt();
			tentativi++;
			if (guess==NumSegreto) {
				indovinato = true;
			} else if (guess<NumSegreto) {
				System.out.println ("Troppo basso! Nuovo tentativo");
			} else if (guess>NumSegreto) {
				System.out.println ("Troppo alto! Nuovo tentativo");
			} else if (guess==0) {
				System.out.println ("Ti sei arreso dopo " +tentativi+ "tentativi eh!!!! Il numero segreto era " +NumSegreto);				
			}
		} while (!indovinato);
		if (indovinato) {
		System.out.println ("Bravo! Hai indovinato!");
		System.out.println ("Ci hai messo " +tentativi+ " tentativi");
		}
	}
}

8 Risposte

  • Re: Programma Indovinare Numero Casuale

    CIao!
    Io ho copiato il tuo codice, ho usato uno "Scanner" al posto del Lettore e tutto funziona correttamente. Quindi immagino ci sia un problema in quello. Ad esempio il lettore ti legge sempre "0", quindi ti stampa "Troppo basso!Nuovo tentativo" e poi termina.
  • Re: Programma Indovinare Numero Casuale

    Della ha scritto:


    CIao!
    Io ho copiato il tuo codice, ho usato uno "Scanner" al posto del Lettore e tutto funziona correttamente. Quindi immagino ci sia un problema in quello. Ad esempio il lettore ti legge sempre "0", quindi ti stampa "Troppo basso!Nuovo tentativo" e poi termina.
    Uhm, capito.

    Quindi, per risolvere mantenendo il Lettore, come si potrebbe fare?
  • Re: Programma Indovinare Numero Casuale

    Ok, la cosa è paradossale.

    Non ho cambiato assolutamente nulla, ed adesso il programma funziona O.o
  • Re: Programma Indovinare Numero Casuale

    A volte succede, e in questi casi ci sta un clean e un re-build del progetto
  • Re: Programma Indovinare Numero Casuale

    E' ciò che ho fatto Della, grazie mille.

    Me ne approfitto per un altro dettaglio, piccolo piccolo, di un altro esercizio ( lettura di quanti numeri sono presenti in una sequenza di numeri separati da uno spazio tra di loro digitata da tastiera )
    import fiji.io.*;
    class CalcoloNumeroSequenzaNumeri {
    	public static void main (String[] args) {
    	int contatore, sequenza;
    	System.out.println("Inserisci una sequenza di numeri separati dallo spazio");
    	contatore = 0;
    	while (!Lettore.in.eoln()) {
    		sequenza = Lettore.in.leggiInt();
    		contatore = contatore + 1;
    	}
    	System.out.println("Il numero di numeri nella sequenza e' " +contatore);
    	}
    }
    Il compilatore mi segnala come errore il fatto che sequenza non è usata all'interno del programma; tuttavia mi è necessario prenderla da tastiera perchè altrimenti la condizione del while non sarà mai soddisfatta, ma al contempo non mi è necessario utilizzarla per qualsivoglia altra cosa che non sia quel Lettore.
  • Re: Programma Indovinare Numero Casuale

    Il problema sta nel fatto che nel tuo programma la variabile "sequenza" non è mai utilizzata in lettura, e quindi ti viene segnalato che quella variabile è, di fatto, inutile. Quello che ottieni, infatti, non è un errore ma un warning che ti avvisa del fatto che stai "sprecando" 4 byte.

    Per risolvere questo "problema" devi semplicemente eliminare la variabile "sequenza" dal tuo programma, modificando anche le istruzioni all'interno del while in questo modo:
    
    while (!Lettore.in.eoln()) {
          Lettore.in.leggiInt();
          contatore = contatore + 1;
       }
    
    La condizione del while, infatti, si basa sul fatto che il lettore non sia arrivato alla fine della riga, ovvero che non abbia letto il carattere "\n".
    L'unico modo che hai per far "avanzare" questo lettore è l'utilizzo del metodo "leggiInt()" (in realtà immagino che ce ne siano altri, come "leggiDouble()", "leggiChar()", ecc..).
    Quindi il motivo per cui usi questo metodo è solo per avanzare nella lettura, e non per ottenere effettivamente il numero che inserisci, per cui non ti serve sapere il valore restituito da tale metodo (cosa che ti servirebbe, ad esempio, per sommare i numeri che inserisci da tastiera).
  • Re: Programma Indovinare Numero Casuale

    Della ha scritto:


    Il problema sta nel fatto che nel tuo programma la variabile "sequenza" non è mai utilizzata in lettura, e quindi ti viene segnalato che quella variabile è, di fatto, inutile. Quello che ottieni, infatti, non è un errore ma un warning che ti avvisa del fatto che stai "sprecando" 4 byte.

    Per risolvere questo "problema" devi semplicemente eliminare la variabile "sequenza" dal tuo programma, modificando anche le istruzioni all'interno del while in questo modo:
    
    while (!Lettore.in.eoln()) {
          Lettore.in.leggiInt();
          contatore = contatore + 1;
       }
    
    La condizione del while, infatti, si basa sul fatto che il lettore non sia arrivato alla fine della riga, ovvero che non abbia letto il carattere "\n".
    L'unico modo che hai per far "avanzare" questo lettore è l'utilizzo del metodo "leggiInt()" (in realtà immagino che ce ne siano altri, come "leggiDouble()", "leggiChar()", ecc..).
    Quindi il motivo per cui usi questo metodo è solo per avanzare nella lettura, e non per ottenere effettivamente il numero che inserisci, per cui non ti serve sapere il valore restituito da tale metodo (cosa che ti servirebbe, ad esempio, per sommare i numeri che inserisci da tastiera).

    Chiarissimo!!!!!!!
    Grazie mille.
  • Re: Programma Indovinare Numero Casuale

    Di niente
Devi accedere o registrarti per scrivere nel forum
8 risposte