Ajuda com código Java

O código mostra o seguinte erro e não sei com resolver:
/MyClass.java:17: error: expected
static int calculasoma(int n1,n2){
^
/MyClass.java:23: error: expected
static int calculasubt(int n1,n2){
^
/MyClass.java:28: error: expected
static int calculadivs(int n1,n2){
^
/MyClass.java:33: error: expected
static int calculamulti(int n1,n2){
^
4 errors

Este é o código:

public class MyClass {
    public static void main(String[] args){
        int n1, n2, soma,subt,divs,multi;
        System.out.println("Digite dois numeros: ");
        n1 = teclado.nextInt;
        n2 = teclado.nextInt;
        soma = calculasoma(n1,n2);
        subt = calculasubt(n1,n2);
        divs = calculadiv(n1,n2);
        multi = calculamulti(n1,n2);
        System.out.println(soma);
        System.out.println(subt);
        System.out.println(divs);
        System.out.println(multi);
   
}
    static int calculasoma(int n1,n2){
        int soma;
        soma = n1 + n2;
        return soma;
   
    }
      static int calculasubt(int n1,n2){
        int subt;
        subt = n1 - n2;
        return subt;
}
   static int calculadivs(int n1,n2){
        int divs;
        divs = n1 / n2;
        return divs;
   }
     static int calculamulti(int n1,n2){
        int multi;
        multi = n1 * n2;
        return multi;
     }
}

onde você instanciou o Objeto da classe Scanner?

Há um problema com a passagem de parâmetros. Todos os parâmetros devem ter seu tipo declarado ou usar varargs. Exemplo:

static int calculamulti(int n1, int n2){
	int multi;
	multi = n1 * n2;
	return multi;
}

Ou:

static int calculamulti(int ... n){
	int multi;
	multi = n[0] * n[1];
	
	return multi;
}

Porque os seus métodos são estáticos?

ele deve ter posto os métodos na mesma classe onde esta o método main e chamado eles ali mesmo.

Seu código tinha bastante coisa errada, vou tentar pontuar para voce ver:

package test;
import java.util.Scanner; //não tinha importado a classe java.util.Scanner

public class MyClass {
    public static void main(String[] args){
        Scanner teclado = new Scanner(System.in); //faltou criar a variavel de referencia teclado.
        int n1, n2, soma,subt,divs,multi;
        System.out.println("Digite dois numeros: ");
        n1 = teclado.nextInt(); //*
        n2 = teclado.nextInt(); //esses dois métodos estavam sem o () no final
        soma = calculasoma(n1,n2);
        subt = calculasubt(n1,n2);
        divs = calculadivs(n1,n2);
        multi = calculamulti(n1,n2);
        System.out.println(soma);
        System.out.println(subt);
        System.out.println(divs);
        System.out.println(multi);
   
}
    
    public static int calculasoma(int n1, int n2){ 
        int soma;
        soma = n1 + n2;
        return soma;
   
    }
    public static int calculasubt(int n1, int n2){
        int subt;
        subt = n1 - n2;
        return subt;
        }
   static int calculadivs(int n1, int n2){
        int divs;
        divs = n1 / n2;
        return divs;
   }
     static int calculamulti(int n1, int n2){
        int multi;
        multi = n1 * n2;
        return multi;
     }
} // tambem faltou colocar o tipo do parametro n2  em todos os métodos.

Se não me engano é só isso. Espero ter ajudado :slight_smile:

1 curtida

Reescrevendo…

import java.util.Scanner;

public class MyClass {
	public static void main(String[] args){
		int numero1;
		int numero2;
		/*int soma;
		int diferenca;
		int produto;
		float quociente;*/
		Scanner leitor = new Scanner(System.in);
		MyClass myClass = new MyClass();
		
		System.out.print("Informe o primeiro número: ");
		numero1 = leitor.nextInt();
		
		System.out.print("Informe o segundo número: ");
		numero2 = leitor.nextInt();
		
		/*soma = myClass.calcularSoma(numero1. numero2);
		diferenca = myClass.calcularDiferenca(numero1, numero2);
		produto = myClass.calcularProduto(numero1, numero2);
		quociente = myClass.calcularQuociente(numero1, numero2);*/
		
		System.out.println("Soma: " + myClass.calcularSoma(numero1, numero2));
		System.out.println("Diferença: " + myClass.calcularDiferenca(numero1, numero2));
		System.out.println("Produto: " + myClass.calcularProduto(numero1, numero2));
		System.out.println("Quociente: " + myClass.calcularQuociente(numero1, numero2));
	}
	
	/*Exemplo com varargs*/
	private int calcularSoma(int ... parcela){
		return parcela[0] + parcela[1];
	}
	
	private int calcularDiferenca(int minuendo, int subtraendo){
		return minuendo - subtraendo;
	}
	
	/*Exemplo com varargs*/
	private int calcularProduto(int ... fator){
		return fator[0] * fator[1];
	}
	
	private float calcularQuociente(int dividendo, int divisor){
		return (float) dividendo / (float) divisor;
	}
}

Testando…

image

1 curtida

Não é muito recomendada essa abordagem de tornar tudo estático. Semanticamente, no Java, método estáticos pertencem à classe e não às instâncias da classe (objeto).

1 curtida

Ss, no caso se não me engano o mais correto seria a criação de uma classe separada, e a alocação dos métodos lá, e a chamada deles em outra classe que teria o método main. É tipo aquele conceito que diz pra deixar cada classe com um “trabalho”. Esse conceito: Coesão está ligado ao princípio da responsabilidade única, que foi introduzido por Robert C. Martin no inicio dos anos 2000 e diz que uma classe deve ter apenas uma única responsabilidade e realizá-la de maneira satisfatória, ou seja, uma classe não deve assumir responsabilidades que não são suas.

1 curtida

A classe tem o SRP que é efetuar cálculos (o mais correto seria que ela se chamasse Calculadora em vez de MyClass). Nada impede que o main seja chamado nela. Se não fosse assim, nas classes que estendem o JFrame, o método main não poderia estar presente, mas em qualquer IDE, cada classe que estende o JFrame tem o seu método main correspondente (quando a tela é montada via drag and drop).

Não entendi a expressão alocação… dos métodos? Não seria mais adequado os termos “chamar” ou “invocar” os métodos?

não foi isso que quis dizer, na verdade falei pra ele deixar os métodos em uma classe separada e não estaticos na mesma classe do main. dai vem a alocação dos métodos em outra classe para chamalos dessa classe onde estão para a classe onde está o main por meio de um objeto. ex:

NovaClasse classe = new NovaClasse();
int a = 1;
int b = 2;
System.out.print(classe.calcularDiferenca(a, b));

-> assim é bem melhor que alocar os métodos e atributos na mesma classe do main e ainda deixa seu sistema coeso. Uma classe so pra rodar o códigos e as outras classes com outras tarefas.