Ajuda com código Java

9 respostas Resolvido
errorjava
L
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;
     }
}

9 Respostas

M

onde você instanciou o Objeto da classe Scanner?

I

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?

M

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

M

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:

I
Solucao aceita

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

I

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).

M

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.

I

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?

M

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.

Criado 22 de novembro de 2019
Ultima resposta 24 de nov. de 2019
Respostas 9
Participantes 3