Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-02-2012, 11:50   #1
Hawk88
Junior Member
 
Iscritto dal: Aug 2010
Messaggi: 24
Calcolatrice - programmino in JAVA

Ho realizzato un programmino in Java che simula il funzionamento di una calcolatrice che svolge le 4 operazioni matematiche fondamentali.

Ecco il codice:

Codice:
import java.util.Scanner;

public class Calcolatrice {
    public void intestazione() {
        System.out.println("+--------------------------+");
        System.out.println("|       CALCOLATRICE       |");
        System.out.println("+--------------------------+");
        System.out.println("***Realizzato da xxx***\n");
    }
    
    public void presentazione() {
           Scanner input = new Scanner(System.in);
           System.out.println("Ciao! Come ti chiami?");
           String nome = input.nextLine();
           System.out.println("Ciao " +nome+ "!");
    }
    
    public void operazioni() {
        Scanner input = new Scanner(System.in);
        System.out.printf("Digita un numero: ");
        float num1 = input.nextFloat();
        System.out.printf("Digita un altro numero: ");
        float num2 = input.nextFloat();
        System.out.println("Ora digita l'operazione che desideri fare:\n1) somma;\n2) sottrazione;\n3) moltiplicazione;\n4) divisione.");
        int scelta = input.nextInt();
        switch(scelta) {
            
            case 1:     {
                        System.out.println("Hai scelto la somma.");
                        float result = num1+num2;
                        System.out.printf("La somma tra %.2f e %.2f vale %.2f.\n", num1,num2,result);
                        break;
                        }
                
            case 2:     {
                        System.out.println("Hai scelto la sottrazione.");
                        float result = num1-num2;
                        System.out.printf("La differenza tra %.2f e %.2f vale %.2f.\n", num1,num2,result);
                        break;
                        }
                
            case 3:     {
                        System.out.println("Hai scelto la moltiplicazione.");
                        float result = num1*num2;
                        System.out.printf("La moltiplicazione tra %.2f e %.2f vale %.2f.\n", num1,num2,result);
                        break;
                        }
                
            case 4:     {
                        System.out.println("Hai scelto la divisione.");
                        float result = num1/num2;
                        System.out.printf("La divisione tra %.2f e %.2f vale %.2f.\n", num1,num2,result);
                        break;
                        }           
            
            default:    {
                        System.out.println("Scelta non riconosciuta.");
                        break;
                        }
                
            }
    }

    public static void main(String[] args) {
        Calcolatrice calc = new Calcolatrice();
        calc.intestazione();
        calc.presentazione();
        calc.operazioni();
        System.exit(0);
    }
}
Volevo però fare in modo che quando veniva effettuata un'operazione, non terminava subito il programma ma richiedeva all'utente di reinserire nuovamente 2 numeri per fare un'altra operazione.
Ho provato con un ciclo do...while ma senza avere successo...

Consigli?

Ultima modifica di Hawk88 : 05-02-2012 alle 12:31.
Hawk88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2012, 23:59   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Direi che il do-while può andare. Tipo:

Codice:
Scanner input = new Scanner(System.in);
boolean termina = false
do {
   //tutto il malloppone

   System.out.println("avanti savoia [n/s]?")
   termina = "n".equals(scanner.nextLine());
} while(!termina)
A occhio dovrebbe funzionare.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2012, 18:20   #3
Hawk88
Junior Member
 
Iscritto dal: Aug 2010
Messaggi: 24
Non funziona, non mi consente di inserire S o N per continuare.
Hawk88 è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2012, 18:53   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quel birichino.

Usa

"n".equals(input.next("\\W"))//cioè dammi un carattere

al posto di

"n".equals(input.nextLine())

Ho scritto input.nextLine() per via dell'abitudine a lavorare per linee con Scanner. Quel che capita col nextLine() è che, poichè la console java richiede un invia per nutrire lo scanner "vuoto", quando chiedi un intero e premi invio lo scanner ti da l'interno ma si tiene l'interruzione di linea nel buffer. Un successivo nextInt la scarterebbe mentre per un "nextLine" è valida, è restituita e fa "saltare" la richiesta.

next("\\W") è come nextInt, solo che piglia una lettera.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:23   #5
Hawk88
Junior Member
 
Iscritto dal: Aug 2010
Messaggi: 24
Ora mi consente di inserire una lettera però appena faccio "invio" mi da l'errore!
Hawk88 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 14:30   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Qui funziona. Mhhh... la trama si infittisce...

che errore ti da?
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 16:46   #7
Hawk88
Junior Member
 
Iscritto dal: Aug 2010
Messaggi: 24
Ecco la schermata di NetBeans:

Codice:
+--------------------------+
|       CALCOLATRICE       |
+--------------------------+
***Realizzato da xxx***

Ciao! Come ti chiami?
Matteo
Ciao Matteo!
Digita un numero: 104
Digita un altro numero: 250
Ora digita l'operazione che desideri fare:
1) somma;
2) sottrazione;
3) moltiplicazione;
4) divisione.
1
Hai scelto la somma.
La somma tra 104,00 e 250,00 vale 354,00.
Vuoi continuare? [S/N]
S
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:909)
	at java.util.Scanner.next(Scanner.java:1530)
	at java.util.Scanner.next(Scanner.java:1463)
	at calcolatrice.Calcolatrice.operazioni(Calcolatrice.java:66)
	at calcolatrice.Calcolatrice.main(Calcolatrice.java:75)
Java Result: 1
BUILD SUCCESSFUL (total time: 12 seconds)
Hawk88 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 16:57   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Passa la stringa: "\\w" (al posto di "\\W") come pattern al metodo next() dello scanner.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2012, 17:10   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Anche \\w non va bene.

Facciamo così.

Anzichè nextFloat() usa:

Float.parseFloat(input.nextLine())

al posto di:

input.nextInt()

usa

Integer.parseInt(input.nextInt())

e anzichè:

"w".equals(next("\\w"))

usa

input.nextLine().toLowerCase().startsWith("S")

Riassumendo:

Codice:
            float num1 = Float.parseFloat(input.nextLine());
            System.out.printf("Digita un altro numero: ");
            float num2 = Float.parseFloat(input.nextLine());
            System.out.println("Ora digita l'operazione che desideri fare:\n1) somma;\n2) sottrazione;\n3) moltiplicazione;\n4) divisione.");
            int scelta = Integer.parseInt(input.nextLine());
e:

Codice:
            System.out.println("Vuoi terminare [n/s]?");
            termina = input.nextLine().toLowerCase().startsWith("s");
Altrimenti il rilevamento del carattere di terminazione devi farlo con un'espressione regolare più complessa di \\w (e non vale mai la pena di usare le espressioni regolari).

Anche così non è a prova di bomba ma è già più tollerante.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 08-02-2012, 18:12   #10
Hawk88
Junior Member
 
Iscritto dal: Aug 2010
Messaggi: 24
Ho semplicemente sostituito

Codice:
"n".equals(input.next("\\W"));
con:

Codice:
"n".equals(input.next("\\w"));
così come ha suggerito banryu79.

Ora funziona, grazie a tutti!
Hawk88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
MacBook Neo sorprende iFixit: 'Non vedev...
Venus Optics presenta due nuovi obiettiv...
AMD pubblica una guida per eseguire Open...
Tomb Raider I-III Remastered arriva su A...
X fa marcia indietro: si adeguerà...
Framework e la crisi delle memorie: terz...
Doom è ovunque: perché il ...
NVIDIA aggiorna G-Sync Pulsar: migliorat...
Portatile gaming con RTX 5060 a 1.099€: ...
6G for dummies: al MWC 2026 il CEO di Qu...
Le RAM tornano a salire di prezzo: quest...
5 robot aspirapolvere bestseller al mini...
A 59 anni il mio primo hackathon: dieci ...
Come sfruttare le Offerte di Primavera p...
NVIDIA promette un salto enorme: path tr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:03.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v