Calcolatrice in Java 11

di il
7 risposte

Calcolatrice in Java 11

Ciao a tutti,
è da poco che ho iniziato a programmare e sto cercando di creare una calcolatrice che possa calcolare più numeri.
Purtroppo quando faccio ad esempio 5+6+5*2 quando clicco "*" non mi calcola più l'operazione. Ho controllato più volte ma non riesco a capire.
Qualcuno saprebbe dirmi dove sbaglio?
Grazie mille!

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class guiform {
    private JTextField textField;
    private JPanel panelPrincipale;
    private JButton quattro;
    private JButton perCento;
    private JButton potenzaButton;
    private JButton cinque;
    private JButton sette;
    private JButton a1XButton;
    private JButton otto;
    private JButton due;
    private JButton uno;
    private JButton cancTutto;
    private JButton cancTesto;
    private JButton cancUnNumero;
    private JButton radiceButton;
    private JButton divisoButton;
    private JButton nove;
    private JButton menoButton;
    private JButton sei;
    private JButton piuButton;
    private JButton tre;
    private JButton ugualeButton;
    private JTextArea textArea;
    private JButton button2;
    private JButton zero;
    private JButton virgola;
    private JButton perButton;
    private static int risultato = 0 ;
    private static int  numero=0;
    static boolean addizioneFlag=false;
    static boolean sottrazioneFlag=false;
    static boolean moltiplicazioneFlag=false;
    static boolean divisioneFlag = false;
    static boolean operazioneAccesaFlag = false;
    static boolean primaOperazioneFlag=true;
    static String  testo="";



    public guiform(){

//FINESTRA___________________________________________________________________FINESTRA__________________________________________________________________________
        JFrame finestra = new JFrame();
        finestra.setBounds(100,100,490,635);
        //finestra.setResizable(false);
        finestra.setContentPane(panelPrincipale);
        finestra.setVisible(true);
        finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



//I BUTTON NUMERI LISTENER_________________________________________________I BUTTON NUMERI LISTENER_______________________________________________
        zero.addActionListener(new clickBottone());
        uno.addActionListener(new clickBottone());
        due.addActionListener(new clickBottone());
        tre.addActionListener(new clickBottone());
        quattro.addActionListener(new clickBottone());
        cinque.addActionListener(new clickBottone());
        sei.addActionListener(new clickBottone());
        sette.addActionListener(new clickBottone());
        otto.addActionListener(new clickBottone());
        nove.addActionListener(new clickBottone());

//BUTTON OPERAZIONI________________________________________BUTTON__OPERAZIONI_________________________________________________________

        piuButton.addActionListener(new clickAddizione());
        menoButton.addActionListener(new clickSottrazione());
        perButton.addActionListener(new clickMoltiplicazione());
        divisoButton.addActionListener(new clickDivisione());
        ugualeButton.addActionListener(new clickRisultato());
    }
//MAIN__________________________________________________________________MAIN_________________________________________________
    public static void main(String[] args) {
        guiform finestra = new guiform();


    }

//SCRIVI NUMERO __________________________________________SCRIVI NUMERO___________________________________________________
    private class clickBottone implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JButton bottone = (JButton)actionEvent.getSource();
            if(operazioneAccesaFlag)
            textField.setText("");
            operazioneAccesaFlag=false;
           textField.setText(textField.getText()+bottone.getText());


        }
    }


//FINISCI OPERAZIONE____________________________________FINISCI OPERAZIONE____________________________________________
    public void finisciOperazione(int numero, String segno, String operazione){
        switch(operazione){
            case "addizione":
                risultato=risultato+numero;
                inserisciTesto(segno);
                break;
            case "sottrazione":
                if(primaOperazioneFlag){
                   risultato=numero;
                   inserisciTesto(segno);
                primaOperazioneFlag=false;}
                else
                    {risultato=risultato-numero;
                        inserisciTesto(segno);}

            case "moltiplicazione":
                if(risultato==0){
                risultato=numero;}
                else{
                    risultato=risultato*numero;
               // }
                    inserisciTesto(segno);

            case "divisione":
                if(numero!=0){
                    risultato=risultato/numero;
                    inserisciTesto(segno);
                }else{
                JOptionPane.showMessageDialog(null,"Divisione nulla");
                }
        }

    }

    //INSERISCI TESTO ________________________________________INSERISCI TESTO________________________________________
    private void inserisciTesto(String segno) {
        testo=testo+numero+segno;
        textArea.setText(testo);
        textField.setText(String.valueOf(risultato));
    }


//LISTENER RISULTATO_________________________________LISTENER RISULTATO____________________________________________
    private class clickRisultato implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            numero=Integer.parseInt(textField.getText());
            if(addizioneFlag)
                finisciOperazione(numero,"","addizione");
            if(sottrazioneFlag)
                finisciOperazione(numero,"","sottrazione");
            if(moltiplicazioneFlag)
                finisciOperazione(numero,"","moltiplicazione");
            if(divisioneFlag)
                finisciOperazione(numero,"","divisione");
            testo="";
            addizioneFlag=false;
            sottrazioneFlag=false;
            moltiplicazioneFlag=false;
            divisioneFlag=false;
            primaOperazioneFlag=true;
        }
    }




    //LISTENER ADDIZIONE________________________________LISTENER ADDIZIONE______________________________________________
    private class clickAddizione implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {

            numero=Integer.parseInt(textField.getText());
            String segno ="+";

            if(sottrazioneFlag){
                finisciOperazione(numero,segno,"sottrazione");
            }else if(moltiplicazioneFlag){
                finisciOperazione(numero,segno,"moltiplicazione");

            }else if(divisioneFlag){
                finisciOperazione(numero,segno,"divisione");
            }else{
                finisciOperazione(numero,segno,"addizione");
            }
            sottrazioneFlag=false;
            moltiplicazioneFlag=false;
            divisioneFlag=false;
            addizioneFlag=true;
            primaOperazioneFlag=false;
            operazioneAccesaFlag=true;

        }
    }



//LISTENER SOTTRAZIONE______________________________LISTENER SOTTRAZIONE____________________________________________
    private class clickSottrazione implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {

            numero=Integer.parseInt(textField.getText());
            String segno="-";

            if(addizioneFlag){
                finisciOperazione(numero,segno,"addizione");

            }else if(moltiplicazioneFlag){
                finisciOperazione(numero,segno,"moltiplicazione");

            }else if(divisioneFlag){
                finisciOperazione(numero,segno,"divisione");

            }else if(sottrazioneFlag){
                finisciOperazione(numero,segno,"sottrazione");
            }else{
                risultato=numero;
                inserisciTesto(segno);
            }
            sottrazioneFlag=true;
            moltiplicazioneFlag=false;
            divisioneFlag=false;
            addizioneFlag=false;
            primaOperazioneFlag=false;
            operazioneAccesaFlag=true;
        }
    }



//LISTENER DIVISIONE______________________________________________________LISTENER DIVISIONE__________________________________________________________
    private class clickDivisione implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {

            numero=Integer.parseInt(textField.getText());
            String segno="/";

            if(addizioneFlag){
                finisciOperazione(numero,segno,"addizione");

            }else if(moltiplicazioneFlag){
                finisciOperazione(numero,segno,"moltiplicazione");

            }else if(sottrazioneFlag){
                finisciOperazione(numero,segno,"sottrazione");

            }else{
                finisciOperazione(numero,segno,"divisione");
            }
            sottrazioneFlag=false;
            moltiplicazioneFlag=false;
            divisioneFlag=true;
            addizioneFlag=false;
            primaOperazioneFlag=false;
            operazioneAccesaFlag=true;
        }
    }



//LISTENER MOLTIPLICAZIONE____________________________LISTENER MOLTIPLICAZIONE_________________________________________
    private class clickMoltiplicazione implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            numero=Integer.parseInt(textField.getText());
            String segno ="X";

            if(sottrazioneFlag){
                finisciOperazione(numero,segno,"sottrazione");
            }else if(addizioneFlag){
                finisciOperazione(numero,segno,"addizione");

            }else if(divisioneFlag){
                finisciOperazione(numero,segno,"divisione");
            }else{
                finisciOperazione(numero,segno,"moltiplicazione");
            }



            sottrazioneFlag=false;
            moltiplicazioneFlag=true;
            divisioneFlag=false;
            addizioneFlag=false;
            primaOperazioneFlag=false;
            operazioneAccesaFlag=true;

        }
    }
}

7 Risposte

  • Re: Calcolatrice in Java 11

    Scritto così non compila nemmeno.
    
                case "moltiplicazione":
                    if(risultato==0){
                    risultato=numero;}
                    else{
                        risultato=risultato*numero;
                   // }
                        inserisciTesto(segno);
    
    C'è il commento sulla chiusa graffa... di conseguenza l'else rimane senza la graffa di chiusura ed il compilatore lamenta che il case successivo ("divisione") è orfano.... da qui si scatenza una sequela di ovvi errori in compilazione.
  • Re: Calcolatrice in Java 11

    Scusa facendo copia e incolla ho dimenticato di cancellare le barre sulla graffa.
    Il programma parte e funziona solo con addizione e sottrazione ma quando cerco di fare la moltiplicazione mi da 1 o un numero che non c'entrano niente..
    Grazie mille!
  • Re: Calcolatrice in Java 11

    Ok, togliendo il commento compila... ma non parte.
    
    Exception in thread "main" java.awt.IllegalComponentStateException: contentPane cannot be set to null.
            at javax.swing.JRootPane.setContentPane(Unknown Source)
            at javax.swing.JFrame.setContentPane(Unknown Source)
            at guiform.<init>(guiform.java:51)
            at guiform.main(guiform.java:79)
    
    Ed, in effetti, nel costruttore scrivi:
    
            finestra.setContentPane(panelPrincipale);
    
    Ma l'oggetto "panelPrincipale" non è istanziato da nessuna parte.

    Se provo a commentare quella riga, ovviamente va in errore su tutte le successive in quanto nessuno dei componenti grafici è stato istanziato, ma tu tenti subito di usarne i metodi.
    
    zero.addActionListener(new clickBottone());
    
    L'oggetto "zero" non è istanziato da nessuna parte... e nemmeno tutti gli altri.

    Non è sicuramente questo il codice che stai usando.
  • Re: Calcolatrice in Java 11

    Si è questo, sto usando IntelliJ e nella GUI form se modifico le proprieà non me le visualizza nel classe...
    Cerco di allegare la cartella ma non accetta il formato...
    Il panelPrincipale è appunto il panel principale della GUI.
  • Re: Calcolatrice in Java 11

    Https://drive.google.com/file/d/186Q28l_wBsNlq2YYY2EEPe--HwrPzEWq/view?usp=sharing
    Questo è il link con la cartella completa.
    Nella cartella cè anche un "primo_codice.java" che non è da tenere in considerazione
    Grazie ancora!
  • Re: Calcolatrice in Java 11

    Non so con che versione di RAR hai compresso il tutto, ma io non riesco ad aprirlo.
  • Re: Calcolatrice in Java 11

    Https://drive.google.com/drive/folders/1n9lkarjuRb9K91Vu_nebvBCTfN1ealhW?usp=sharing
    Ho salvato la cartella senza comprimerla in questo link
Devi accedere o registrarti per scrivere nel forum
7 risposte