O que tem de errado este programa? (java)

A-Pock

Membro
Tenho andado a brincar com o swing no java e estava a tentar fazer uma calculadora, algo muito simples apenas pra ver se funciona e cheguei a isto:

Código:
 import javax.swing.*;

public class teste{
    

public teste() {
}
    
    public static void main(String[] args) {
        
        
        double r=0;
        String op;
        int n1=Integer.parseInt(JOptionPane.showInputDialog("Qual o 1º numero?"));
        int n2=Integer.parseInt(JOptionPane.showInputDialog("Qual o segundo numero?"));
        op=JOptionPane.showInputDialog("Qual a operação? (*,/,+,-)");
        if (op=="*")
        {
            r=n1*n2;
            JOptionPane.showMessageDialog(null, "o resutado é:"+r);
        }
        else
        {
            if(op=="+")
            {
                r=n1+n2;
                JOptionPane.showMessageDialog(null, "O resultado é:"+r);
            }
            else
            {
                if(op=="-")
                {
                    r=n1-n2;
                    JOptionPane.showMessageDialog(null, "O resultado é:"+r);
                }
                else
                {
                    r=n1/n2;
                    JOptionPane.showMessageDialog(null, "O resultado é:"+r);
                }
            }
        }
    }

}
Eu sei que não tem validações e os calculos só funcionam para numeros inteiros etc mas como disse isto foi só para testar.
O que acontece é que isto não dá erro de compilação mas também não corre, estou a usar o eclipse, alguma ajuda? :cool:
 
Última edição:
1º, em java, os nomes das classes são capitalizados

2º, identa essa maravilha e usa a tag
Código:
, depois volta a perguntar
 
Última edição pelo moderador:
isso está mal identado, mas já se percebe alguma coisa..

1º (blablabla)
2º, precisas de uma frame (uma janela) para o que queres fazer
a utilização dos métodos showBlahblah não mostram coisa alguma porque não tens um contentor onde os mostrar; podes resolver isso derivando de JFrame
3º, tratado isso, crias uma instância e fazes .setVisible(true) e já te vai aparecer as dialog boxes
4º, testei essa treta com 1 2 + e o resultado foi 0.0, não aprendas a programar que não é preciso :joker::joker: (e o teu código está horrível, recomendo-te leres uns livros/tutoriais antes de continuares a estragar a humanidade com o teu código)

Abraços, presty :joker:
 
Última edição pelo moderador:
Código:
import javax.swing.*;

public class teste {

    public static void main(String[] args) {
        double r = 0;
        String op;
        double n1 = Double.parseDouble(JOptionPane.showInputDialog("Qual o 1º numero?"));
        double n2 = Double.parseDouble(JOptionPane.showInputDialog("Qual o segundo numero?"));
        op = JOptionPane.showInputDialog("Qual a operação? (*,/,+,-)");
        if (op.equals("*")) {
            r = n1 * n2;
            JOptionPane.showMessageDialog(null, "o resutado é:" + r);
        } else {
            if (op.equals("+")) {
                r = n1 + n2;
                JOptionPane.showMessageDialog(null, "O resultado é:" + r);
            } else {
                if (op.equals("-")) {
                    r = n1 - n2;
                    JOptionPane.showMessageDialog(null, "O resultado é:" + r);
                } else {
                    r = n1 / n2;
                    JOptionPane.showMessageDialog(null, "O resultado é:" + r);
                }
            }
        }
    }
}

ta a funfar
 
Última edição:
Código:
import javax.swing.*;

public class teste {

    public static void main(String[] args) {
        double r = 0;
        String op;
        double n1 = Double.parseDouble(JOptionPane.showInputDialog("Qual o 1º numero?"));
        double n2 = Double.parseDouble(JOptionPane.showInputDialog("Qual o segundo numero?"));
        op = JOptionPane.showInputDialog("Qual a operação? (*,/,+,-)");
        if (op.equals("*")) {
            r = n1 * n2;
            JOptionPane.showMessageDialog(null, "o resutado é:" + r);
        } else {
            if (op.equals("+")) {
                r = n1 + n2;
                JOptionPane.showMessageDialog(null, "O resultado é:" + r);
            } else {
                if (op.equals("-")) {
                    r = n1 - n2;
                    JOptionPane.showMessageDialog(null, "O resultado é:" + r);
                } else {
                    r = n1 / n2;
                    JOptionPane.showMessageDialog(null, "O resultado é:" + r);
                }
            }
        }
    }
}
ta a funfar

Obrigado, já tou a perceber onde estavam os erros :beerchug:
 
Não tinha nenhum erro.
Só se for o eclipse k n deixa correr com o == em x de equals, foi a unica coise que alterei (para além do double n1 , n2).

Agora tens k por o programa rubusto, tens k por restriçoes ....
 
Não tinha nenhum erro.
Só se for o eclipse k n deixa correr com o == em x de equals, foi a unica coise que alterei (para além do double n1 , n2).

Agora tens k por o programa rubusto, tens k por restriçoes ....

não nada disso, como disse no post inicial só criei este prog pra testar o swing uma vez que ainda me estou a familiarizar com o java, (a calculadora é tipo o meu programa de diagnostico quando começo com uma linguagem nova) por isso é que disse logo que não tinha posto validações nem doubles nas variaveis, muito menos criar codigo decente:cool:.

Eu realmente tive logo a impressão que fosse do compilador o facto do programa não correr mas já estou habituado ao eclipse de o usar pra compilar C.

Recomenda-se algum compilador que seja mais user friendly no caso do java?
 
Última edição:
Não tinha nenhum erro.
Só se for o eclipse k n deixa correr com o == em x de equals, foi a unica coise que alterei (para além do double n1 , n2).

Agora tens k por o programa rubusto, tens k por restriçoes ....

Não é o eclipse que não deixa utilizar == em vez de equals! Isso é mesmo uma imposição do Java. Esses operadores verificam se são exactamente os mesmos objectos!

Por exemplo:

Código:
String a = new String("Techzone");
String b = new String("Techzone");

boolean x = a == b; 
boolean y = a == a;

System.out.print("x=" + x + ", y=" +  y); //x=false, X=true

Edit:

Já agora, existe uma maneira de comparar Strings com ==, mas actualmente isso não tem vatagens nenhumas. Talvez já tenha tido no passado com as VMs antigas.

Tal como diz na API do Java,
It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.

Ficando assim:
Código:
String a = new String("Techzone");
String b = new String("Techzone");

boolean x = a == b; 
boolean y = a == a;
boolean z = a.intern() == b.intern();

System.out.print("x=" + x + ", y=" +  y + ", z=" +  z); //x=false, y=true, z=true

De qualquer modo, o aconcelhado é o uso do equals.
 
Última edição:
Back
Topo