Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Esercizio con Java

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26

    Esercizio con Java

    Salve,
    mi sto avvicinando adesso al mondo Java e vorrei un aiuto per un esercizio che sto facendo. Devo creare il gioco carta, forbici e sasso, ma non riesco pur utilizzando il costrutto if a far si che anziché leggere al video il numero legga proprio, carta forbice e sasso.
    Il codice che sto usando è questo.
    Prima parte inserita in un file chiamato MioGioco e che non ha il main.
    public class MioGioco {public void sceltaRudy() {
    int sceltaRudy = 0, scelta = 0, a = 1, b = 2, c = 3;


    if (sceltaRudy ==1)
    System.out.println("carta");
    if (sceltaRudy ==2)
    System.out.println("sasso");
    if (sceltaRudy ==3)
    System.out.println("forbici");
    }
    }
    Poi nel file con il main ho scritto questo:
    import java.util.*;
    public class Applicazione1 {
    public static void main(String args []) {
    MioGioco miogioco = new MioGioco();
    miogioco.sceltaRudy();


    Scanner scanner = new Scanner(
    System.in);
    System.out.println("Benvenuto! pronto a giocare con rudy? Presentati scrivendo il tuo nome e premi invio!");
    scanner.next();
    System.out.println("Ciao! Digita 1 per carta, 2 per forbici e 3 per sasso");
    scanner.nextInt();
    System.out.println("Attendere giocata di Rudy");
    Random randomsceltaRudy = new Random ();
    System.out.println(randomsceltaRudy.nextInt(3)+1);
    }
    } Dove sbaglio? grazie anticipatamente a chi vorrà aiutarmi!
    Vorrei che quando l'utente digita un numero e quando il computer lo genera in modo casuale, apparisse al video carta, sasso o forbici: meglio ancora se dica qualcosa del tipo: "carta avvolge sasso hai perso"! Eccetera. Qual è il passaggio che non riesco a fare?
    Grazie anticipatamente a chi vorrà aiutarmi!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Nel main istanzi un oggetto di tipo MioGioco.
    Quindi chiami il metodo sceltaRudy().
    Il metodo sceltaRudy() imposta 5 variabili locali (locali significa che quando il metodo termina, quelle variabili vengono eliminate): "sceltaRudy" a 0, "scelta" a 0, "a" a 1, "b" a 2, "c" a 3.
    Poi vengono fatte delle if valutando il valore della variabile "sceltaRudy", nessuna delle quali è soddisfatta (perchè sceltaRudy vale 0: l'hai impostata tu nella riga appena prima!), quindi quel metodo semplicemente non fa nulla (e istanzia 4 variabili che non servono a nulla: "scelta", "a", "b" e "c" che non vengono usate).

    Poi il pogramma prosegue con le scelte dell'utente.

    Cos'è che volevi fare esattamente?


    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
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26
    Ciao, allora, prima di tutto quel che volevo fare è questo: siccome mi hanno detto che la classe random funziona solo per i numeri, allora dovevo Abbinare un numero a carta, uno a forbbici e un altro numero a sasso. Poi, volevo che il giocatore virtuale, quindi random, avesse un nome: ecco perché ho scelto rudi. poi volevo dire che la prima scelta: doveva essere dell’utente e pensavo di dover mettere scelta e sceltaRudy a zero per poter far inserire i dati all’utente. Allora mi aiuta a capire come si fa nello specifico? Grazie, ma sono all’inizio con Java e non ho neanche basi di programmazione.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Ciao, allora, prima di tutto quel che volevo fare è questo: siccome mi hanno detto che la classe random funziona solo per i numeri, allora dovevo Abbinare un numero a carta, uno a forbbici e un altro numero a sasso.
    E fin qua tutto ok.

    Poi, volevo che il giocatore virtuale, quindi random, avesse un nome: ecco perché ho scelto rudi.
    Ok.

    poi volevo dire che la prima scelta: doveva essere dell’utente e pensavo di dover mettere scelta e sceltaRudy a zero per poter far inserire i dati all’utente.
    Ok, circa.
    Se vuoi far scegliere prima all'utente umano, devi per prima cosa fargli inserire un valore... e questo valore non lo devi buttare via (come stai facendo), ma lo devi immagazzinare in una variabile di tipo intero.

    Quando tu scrivi:
    codice:
    scanner.next();

    Stai mettendo "in pausa" l'esecuzione in attesa di un input da parte dell'utente... ciò che digita l'utente, però, lo butti via. Il metodo next() della classe Scanner restituisce una stringa, ma tu non la stai assegnando ad una variabile, quindi viene semplicemente buttata via. Ora, hai due possibilità:

    1) Leggere una stringa e farne il parsing per vedere se ciò che l'utente ha digitato è effettivamente un numero
    2) Leggere direttamente un intero usando nextInt() (ma dovrai occuparti di consumare l'invio residuo che rimane nel buffer).

    In ciascuno di questi casi, il valore letto lo dovrai assegnare ad una variabile, per non perderlo.

    codice:
    int sceltaUtente = scanner.nextInt();
    scanner.nextLine();   // rimuovo l'INVIO residuo dal buffer

    Dopo aver letto l'input dall'utente si passerà all'estrazione casuale del numero da parte di Rudy. E si effettueranno tutte le considerazioni del caso.

    C'è, comunque, della sequenzialità nelle operazioni: se il tuo scopo è quello di far scegliere prima l'utente e poi il computer, allora le operazioni vanno fatte in quest'ordine, non al contrario come stavi cercando di fare tu inizialmente.

    E' chiaro, comunque, che la classe Random andrebbe usata nel metodo sceltaRudy(), non al di fuori e decisamente non DOPO che il metodo è già stato invocato per nulla.

    Quindi, rivedi il tuo codice e prova ad abbozzarlo secondo la sequenzialità delle operazioni da fare (poco importa che all'inizio funzioni, cerca di chiarirti le ideee innanzututto sull'ordine in cui eseguire le operazioni e sul come usare le istruzioni di assegnazione per non buttare via le letture).


    Allora mi aiuta a capire come si fa nello specifico? Grazie, ma sono all’inizio con Java e non ho neanche basi di programmazione.
    Ti consiglio di seguire il tutorial di Oracle dall'inizio così da avere chiaro come funzionano le cose all'interno di un programma Java: le cose di base come la sequenzialità delle operazioni, le istruzioni di assegnazione, le chiamate a metodi, ecc. altrimenti non farai molta strada in tal senso.


    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

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ti metto qui una soluzione molto spartana (non fa uso di oggetti, né di enumerazioni, che in questo contesto possono tornare utili), ma dovrebbe essere chiaro cosa si intende per SEQUENZIALITA' delle operazioni.
    Lascia perdere il costrutto do/while se non l'hai ancora affrontato (serve solo a validare la scelta dell'utente e forzarlo a scegliere un valore tra 1 e 3) e pure il costrutto switch (che può essere sostituito da una serie di if / else). Concentrati sui concetti fondamentali: sequenza di istruzioni e assegnamenti.


    codice:
    import java.io.*;
    import java.util.*;
    
    public class MioGioco {
    
       private static int sceltaRudy() {
          Random r = new Random();
          return r.nextInt(3) + 1;
       }
    
       private static void valutaRisultato(int utente, int computer, String nomeUtente) {
          String risultato = null;
    
          switch( utente ) {
             case 1:   // Utente ha scelto CARTA
                switch( computer ) {
                   case 1:   // Anche Rudy ha scelto CARTA... parità
                      risultato = "CARTA con CARTA: parità";
                      break;
    
                   case 2:   // Rudy ha scelto FORBICE... vince!
                      risultato = "FORBICE taglia CARTA: vince Rudy!";
                      break;
    
                   case 3:   // Rudy ha scelto SASSO... vince l'utente
                      risultato = "CARTA avvolge SASSO: vince " + nomeUtente + "!";
                      break;
                }
                break;
    
             case 2:   // Utente ha scelto FORBICE
                switch( computer ) {
                   case 1:   // Rudy ha scelto CARTA... vince l'utente
                      risultato = "FORBICE taglia CARTA: vince " + nomeUtente + "!";
                      break;
    
                   case 2:   // Anche Rudy ha scelto FORBICE... parità!
                      risultato = "FORBICE con FORBICE: parità!";
                      break;
    
                   case 3:   // Rudy ha scelto SASSO... vince!
                      risultato = "SASSO rompe FORBICE: vince Rudy!";
                      break;
                }
                break;
    
             case 3:   // Utente ha scelto SASSO
                switch( computer ) {
                   case 1:   // Rudy ha scelto CARTA... vince!
                      risultato = "CARTA avvolge SASSO: vince Rudy!";
                      break;
    
                   case 2:   // Rudy ha scelto FORBICE... vince l'utente!
                      risultato = "SASSO rompe FORBICE: vince " + nomeUtente + "!";
                      break;
    
                   case 3:   // Anche Rudy ha scelto SASSO... parità!
                      risultato = "SASSO con SASSO: parità!";
                      break;
                }
          }
    
          System.out.println( risultato );
       }
    
       public static void main(String[] args) throws Exception {
          Scanner scanner = new Scanner( System.in );
          System.out.println("Digita il tuo nome: ");
          String nomeUtente = scanner.nextLine();
    
          int sceltaUtente = 0;
          do {
             System.out.println("Scegli: 1 = Carta; 2 = Forbice; 3 = Sasso");
             sceltaUtente = scanner.nextInt();
             scanner.nextLine();
          } while((sceltaUtente < 1) || (sceltaUtente > 3));
    
          int sceltaDiRudy = sceltaRudy();
    
          valutaRisultato(sceltaUtente, sceltaDiRudy, nomeUtente);
       }
    }

    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
    Nov 2019
    Messaggi
    26
    Salve, prima di tutto grazie, è stato gentilissimo! Il problema è che io la teoria più o meno l'ho capita, è la pratica che non riesco a fare, mi ci perdo ancora e non so il perché. Adesso con il suo esempio provo a mettere su qualcosa. Cos'è import java.util.io? Per il momento conoscevo solo import java.util.* e util.scanner. Ancora mille grazie!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Salve, prima di tutto grazie, è stato gentilissimo! Il problema è che io la teoria più o meno l'ho capita, è la pratica che non riesco a fare, mi ci perdo ancora e non so il perché. Adesso con il suo esempio provo a mettere su qualcosa. Cos'è import java.util.io? Per il momento conoscevo solo import java.util.* e util.scanner. Ancora mille grazie!

    Ciao.
    Nei forum generalmente ci si dà del tu.

    Ignora l'import di java.io (è il package per la gestione dell'input/output): ormai vado in automatico e lo metto dappertutto perchè è rarissimo che non mi serva nulla di quel package... in questo caso è perfettamente inutile.


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26
    Ciao, ok, allora ti do del tu e approfitto di un'altra domanda. Se prendendo spunto dall'esempio che mi hai fatto tu, vorrei utilizzare il costrutto if: posso farlo utilizzando case 1 eccetera o quest'ultimo va utilizzato solo con switch?
    Grazie della disponibilità!

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il costrutto switch serve solo a rendere più compatto (e leggibile) il codice in presenza di molte condizioni alternative che renderebbero più prolisso il codice se venisse usato il costrutto if. Ma sono assolutamente "intercambiabili". Se stai chiedendo se puoi usare i case con l'if, ovviamente no. La sintassi dei due costrutti è la seguente e va rispettata:

    Costrutto IF:
    codice:
    if ( espressione booleana ) {
       ...
    } else {
       ...
    }
    
    (il ramo else è facoltativo)


    Costrutto SWITCH:
    codice:
    switch( espressione intera ) {
       case <valore_intero>:
          ...
          break;
    
       case <valore_intero>:
          ...
          break;
    
       ...
    
       default:
          ...
          break;
    }

    Da Java 5 l'espressione del costrutto switch può essere anche un'enumerazione.
    Da Java 7 l'espressione da valutare nel costrutto switch può essere anche una stringa.


    Ciao.
    Ultima modifica di LeleFT; 05-11-2019 a 13:14
    "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

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26
    Ok, sei stato chiarissimo. Grazie ai tuoi suggerimenti ho provato nuovamente a mettere su il gioco e, il primo file quello senza main, perché ci è stato detto di dividere il gioco in almeno 2 classi, sono riuscita a compilarlo, ho usato il costrutto if, volevo mettere anche else, ma mi dava errore, leggendo la tua risposta credo che forse per colpa delle parentesi graffe che non avevo messo.
    Ora però ho alcuni errori in quella con il main.
    Mi dice che non trova il simbolo, io ho fatto solo una piccola variazione a quello che mi avevi scritto tu, perché l'esercizio diceva di istanziare la classe, quindi ho lasciato MioGioco miogioco = new Miogioco.
    Te lo lascio così se ti fa piacere e non è un problema mi dici cosa ho tralasciato.
    Credo che confrontandomi con te le cose inizino ad andare meglio: poi ti farò sapere al prossimo esercizio, se riuscirò a compilarlo con meno fatica.
    classe senza main, che si compila.
    import java.util.*;
    public class MioGioco {
    public static int sceltaRudy() {
    Random random = new Random();
    return random.nextInt(3) + 1;
    }
    public static void valutaRisultato(int utente, int computer, String nomeUtente) {
    String risultato = null;
    if (utente ==1)
    if (computer ==1)
    System.out.println(risultato = "Carta con carta: pareggio");
    if (computer == 2)
    System.out.println(risultato = "Forbici taglia carta... ha vinto rudi!");
    if (computer ==3)
    System.out.println(risultato = "Carta avvolge sasso... vince " + nomeUtente + "!");
    if (utente ==2)
    if (computer == 2)
    System.out.println(risultato = "Forbice con forbice pareggio!");
    if (computer ==1)
    System.out.print(risultato = "Forbice taglia carta vince ..." + nomeUtente + "!");
    if (computer ==3);
    System.out.println(risultato = "Sasso rompe forbice... vince Rudy!");
    if (utente== 1)
    if (computer == 1)
    System.out.println(risultato = "Sasso con sasso Pareggio!");
    if ( computer ==2)
    System.out.println(risultato = "Sasso rompe forbice vince... " + nomeUtente + "!");
    if ( computer == 3)
    System.out.println(risultato = "Sasso con sasso... pareggio!");
    }
    }
    Classe con il main che dà errore.
    public class Applicazione1 {
    public static void main(String args []) { //non ho scritto trows exception, perché non l'hanno ancora spiegato.
    MioGioco miogioco = new MioGioco();
    Scanner scanner = new Scanner(
    System.in);
    System.out.println("Benvenuto! pronto a giocare con rudy? Presentati scrivendo il tuo nome e premi invio!");
    String nomeUtente = scanner.nextLine();
    int sceltaUtente = 0;
    do {
    System.out.println("Ciao! Digita 1 per carta, 2 per forbici e 3 per sasso");
    sceltaUtente = scanner.nextInt();
    scanner.nextLine();
    }
    while ((sceltaUtente < 1) || (sceltaUtente > 3));
    int sceltaDiRudy = sceltaRudy();
    valutaRisultato(sceltaUtente, sceltaDiRudy, nomeUtente);
    }
    }

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.