Calcular dois numeros

9 respostas
A

Olá galera!
Sou novo aqui no fórum e ultimamente tenho lutado para aprender esse “mal necessário” chamado Java rsrsrs.
Sem ter muita noção de OO estou tentando fazer um programinha para calcular a soma de dois números. Mas desejo fazer isto em duas classes.
Esta classe contém o método:

package javaapplication2;


public class Calcula {
  static int valor1;
  static int valor2;
  static int soma;


   public Calcula()
   {
   soma = valor1 + valor2;

   }
}

Esta outra é a classe principal

package javaapplication2;

import javax.swing.JOptionPane;

public class Main {

    
    public static void main(String[] args) {
     int recebe1 = Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro numero " + Calcula.valor1));
     int recebe2 = Integer.parseInt(JOptionPane.showInputDialog("Digite o segundo numero " + Calcula.valor2));
     JOptionPane.showMessageDialog(null, "O resultado é " + Calcula.soma);

       }
       
    }

Porém, ao executar o codigo o valor da soma fica sempre 0. Inclusive o valor1 e o valor2 tambem ficam sendo 0. Parece que isso acontece pelo fato de as variaveis terem sido declaradas como “static” e o valor permanece padrão, mas se não for “static” não tem como acessa-los na classe principal. Como faz para calcular estes numeros com o usuário passando os valores?

9 Respostas

M

Quando voce faz dessa forma:

int recebe1 = Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro numero " + Calcula.valor1));  
int recebe2 = Integer.parseInt(JOptionPane.showInputDialog("Digite o segundo numero " + Calcula.valor2));

Está atribuindo valor a variável recebe1 e recebe2 e quando tenta fazer a soma não funciona pois valor1 e valor2 não estão recebendo valores.

O melhor a se fazer é criar um método calcular que retorna uma soma dos dois parametros de valores.

class Calcula {
	int soma;
	public int calcular(int valor1, int valor2) {
		return soma = valor1 + valor2;
	}
}

Ai na chamada no método voce coloca o recebe1 e recebe2
Flw

W

tente:

import javax.swing.JOptionPane;

public class Calcula {
    static int valor1;
    static int valor2;
    static int soma;

    static void calcula() { // isto é um método. métodos podem ser static e tem retorno.
        soma = valor1 + valor2;
    }

    public static void main(String[] args) {
        Calcula.valor1 = Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro numero"));
        Calcula.valor2 = Integer.parseInt(JOptionPane.showInputDialog("Digite o segundo numero"));
        Calcula.calcula();
        JOptionPane.showMessageDialog(null, "O resultado é " + Calcula.soma);
    }
}
Java é case sensitive.
public Calcula() { // isto é um construtor. contrutores não podem ser static e não tem retorno.
    // ...
}
o método main pode estar em outra classe. fiz na mesma classe para que você tente colocá-lo em outra.
A

Recomendo ler o conceito de:

1 - Modificadores de acesso (public, static, private, default)
2 - Conceito de instânciação de classes
3 - Conceito de construtores
4 - Conceito de método e variáveis estáticos

A

Próximo do que você tentou fazer talvez pudesse ser isso (detalhe compilei na cabeça na telinha aqui do GUJ pode haver erros de compilação, ok?):

public class Calcula {   

    // Atributo
    private int soma;   
  
   // Construtor com parametros
   public Calcula(int valor1, int valor2) {   
       this.soma = valor1 + valor2;
   }   


  // Construtor padrão
   public Calcula(){
   }

  // Getter
  public int getSoma(){
     return this.soma;
  }
}
class Test{
    public static void main (String []args){
       Calcula c1 = Calcula(1, 2);
       System.out.print(c1.getSoma());
   }
    
}
A
public static void main(String[] args) {   
     int recebe1 = Integer.parseInt(JOptionPane.showInputDialog("Digite o primeiro numero " + Calcula.valor1));   
     int recebe2 = Integer.parseInt(JOptionPane.showInputDialog("Digite o segundo numero " + Calcula.valor2));   
     JOptionPane.showMessageDialog(null, "O resultado é " + Calcula.soma);   
  
       }

Essa arquitetura acredito que só funcione se você usar o design pattern chamado Singleton, aliás, já implementei isso em um projeto passado.

A

Claro, antes precisaria mudar algumas coisas tal como isso não existe:

Calcula.soma);
A

Hehehe… Me empolguei neste exercício seu, rs… Quando eu era estagiário, lembro que meu chefe falou assim no almoço: André, vamos ver como você está! Implementa agora para mim um método que calcule dois números! hehehe… Enrolei, até pedí papel para o garçom (sempre adorei desafios e tals), mas a verdade e que não conseguí solucionar! rs…

Sorte!
André AS.

A
package javaapplication2;

Crie em pacotes diferentes e com nomes sugestíveis, veja um exemplo:

package br.edu.projetodeestudo.helperAqui dentro você implementar a classe Calcula

package br.edu.projetodeestudo.testesAqui dentro você implementar a classe Main

Desta forma você conseguirá usufluir melhor de OO, tal como a classe Calcula tem de ser obrigatoriamente public
já a classe Main não precisa ser.

Entendeu?

A

Obrigado a todos pela ajuda!

Criado 23 de abril de 2011
Ultima resposta 24 de abr. de 2011
Respostas 9
Participantes 4