Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-02-2012, 10: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 11:31.
Hawk88 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2012, 22: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, 17: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, 17: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, 13: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, 13: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, 15: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, 15: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, 16: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, 17: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


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Apple smette di firmare iOS 26.6.2: chi ...
Rallentare l'IA per sicurezza o per tene...
X informerà gli utenti quando i g...
MediaTek presenta Dimensity CX C10 Max, ...
iPhone 18 Pro, alcuni utenti segnalano p...
ChatGPT ti segue anche fuori dalla chat:...
Destiny 2 non è finito: Bungie ri...
iPhone 20 Pro, un nuovo leak anticipa i ...
Ricaricare l'auto con la stessa velocit&...
Generazione Z e lavoro: l'IA ripensa gli...
Samsung Galaxy Tab S12+ e S12 Ultra: spe...
Xiaomi lancia il nuovo Mijia 271L, il fr...
Risoluzione 2K nativa e sfondi trasparen...
iPhone 18 Pro, promosso da DXOMARK ma no...
vivo presenta la nuova serie X500: Pro M...
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: 12:23.


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