Calcular dois numeros

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?

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

tente:

[code]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);
}

}[/code]
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.

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

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?):

[code]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;
}
}[/code]

[code]class Test{
public static void main (String []args){
Calcula c1 = Calcula(1, 2);
System.out.print(c1.getSoma());
}

}[/code]

[code] 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);

   }   [/code]

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

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

Calcula.soma); 

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.

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?

Obrigado a todos pela ajuda!