Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    7

    questo metodo non parte!

    ho provato a fare un programma chi simuli in maniera molto superficiale la calcolatrice......ma nella classe main, quando chiedo se vuole procedere con un'altra operazione, il metodo che dovrebbe essere eseguito in base alla decisione presa non lo avvia e anzi termina il programma......mi potete spiegare dov'è che sbaglio??? il codice del main è questo....

    import java.util.*;

    public class CalcolatriceTest
    {
    public static void main (String args[])
    {
    Scanner input = new Scanner(System.in);
    Calcolatrice oggetto = new Calcolatrice();

    System.out.println("Benvenuto! Questo programma simula una calcolatrice...");
    System.out.println("Lista Operazioni: \n1. Addizione \n2. Sottrazione \n3. Moltiplicazione \n4. Divisione \nDigiti l'operazione");

    int operazione = input.nextInt();
    oggetto.setScelta(operazione);

    System.out.println();
    System.out.println("Inserire il primo numero: ");
    int num1 = input.nextInt();
    oggetto.setPrimoNum(num1);

    System.out.println("Inserire il secondo numero: ");
    int num2 = input.nextInt();
    oggetto.setSecondoNum(num2);
    oggetto.SceltaOperazione();

    System.out.println("\nVuole continuare con una prossima operazione?: Y o N");
    String decisione = input.nextLine();
    oggetto.setDecisione(decisione);
    oggetto.Decisione();
    }
    }

    funziona tutto tranne il metodo Decisione.....questo metodo non parte....

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da N'zù
    funziona tutto tranne il metodo Decisione.....questo metodo non parte....
    Cosa vuol dire non parte? Da errore? Da risultati diversi da quelli attesi? E se sì, quali?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    7
    è come se il metodo Decisione non esistesse........Dopo che stampa a video se vuole procedere con un'altra operazione, il programma termina! Invece dovrebbe continuare perché il metodo Decisione permette di fare o meno un'altra operazione......spero di essere stato più chiaro..

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    7
    Benvenuto! Questo programma simula una calcolatrice...
    Lista Operazioni:
    1. Addizione
    2. Sottrazione
    3. Moltiplicazione
    4. Divisione
    Digiti l'operazione
    3

    Inserire il primo numero:
    1
    Inserire il secondo numero:
    6
    Il risultato e': 6
    Vuole continuare con una prossima operazione?: Y o N

    Process completed.

    Ecco cosa mi spunta! Il processo non dovrebbe essere completato.....non riesco a digitare la mia decisione se voglio o meno continuare con un'altra operazione..

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E noi come possiamo sapere cosa dovrebbe fare il metodo "Decisione" della classe Calcolatrice di cui non conosciamo assolutamente nulla? Se non ne posti il codice, non troveremo mai l'errore che sicuramente stà lì. Quello che ti posso assicurare con assoluta certezza è che quel metodo viene invocato eccome (a meno che il metodo setDecisione() non sollevi un'eccezione, di cui nessuno sa nulla perchè, evidentemente, non è stata trattata nel modo corretto).


    PS: quando posti del codice, usa i tag CODE, altrimenti non si capisce nulla.


    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
    Apr 2012
    Messaggi
    7
    codice:
    public void SceltaOperazione()
    	{
    		if (scelta == 1)
    		{
    			Addizione();
    		}
    		if (scelta == 2)
    		{
    			Sottrazione();
    		}
    		if (scelta == 3)
    		{
    			Moltiplicazione();
    		}
    		if (scelta == 4)
    		{
    			Divisione();
    		}
    	}
    	
    	public void Decisione()
    	{
    		
    		if (decisione.equals("y"))
    		{
    			SceltaOperazione();
    		}
    		if (decisione.equals("n"))
    		{
    			System.out.println("Arrivederci per una prossima operazione!");
    		}
    	}
    }
    come puoi notare i metodi delle operazioni funzionano........questo è il metodo Decisione della classe Calcolatrice.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Da quello che posso vedere, quel metodo fa qualcosa se e solo se la variabile "decisione" (che non si vede come viene inizializzata) è "y" o "n" esattamente in minuscolo, senza spazi superflui, ecc... In qualunque altro caso, non fa proprio nulla.

    Io proverei a farmi stampare il valore della variabile "decisione", giusto per capire cosa c'è dentro...

    E non hai usato i tag CODE, come richiesto.... li ho aggiunti io.
    "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
    Apr 2012
    Messaggi
    7
    ahahahah scusami, dammi tempo di imparare....mi sono registrato ieri!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    7
    il problema è che non faccio in tempo di digitare un "y" o un "n".....perché il programma termina subito dopo! è questo che non capisco.....perché termina senza considerare il metodo Decisione() ???

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il problema è la riga evidenziata:

    codice:
    System.out.println("Inserire il secondo numero: ");
    int num2 = input.nextInt();
    nextInt() legge un intero... ma tu, per dare in pasto l'input al programma, scrivi '6' e poi premi INVIO. Ebbene... nextInt() prende il 6 e lo converte in intero, ma nel buffer di input c'è ancora l'INVIO... che viene letto dall'istruzione successiva, ovvero:

    codice:
    System.out.println("\nVuole continuare con una prossima operazione?: Y o N");
    String decisione = input.nextLine();
    Per questo non fai a tempo a dargli l'input... La gestione dell'input va fatta in modo oculato. Ci sono diversi modi per farlo. Quello che serve a te in questo momento è una "pulitura" del buffer: ovvero, dopo che hai letto l'intero con nextInt() devi effettuare una lettura "a vuoto" per pulire il buffer dal carattere di INVIO che ancora è lì.

    codice:
    System.out.println("Inserire il secondo numero: ");
    int num2 = input.nextInt();
    input.nextLine();
    Io preferirei, al contrario, gestire l'input in modo diverso: leggere sempre e solo delle stringhe (quindi usare sempre nextLine()) ed effettuare la validazione manuale (quando necessito di un intero, faccio il parsing della stringa come intero, quando mi serve un double faccio il parsing della stringa come double, ecc). In questo modo non corro il rischio di lasciare nel buffer sporcizia che poi mi genera questo tipo di fastidi.


    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

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.