Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre chamadas de métodos na classe principal.

Olá, precisa de uma ajuda, to tentando fazer um trabalho para faculdade e não to conseguindo entender como faço para chamar os métodos na minha classe principal para poder executar o que criei. Basicamente eu tenho que pedir para o usuário falar o número de lados de um poligono para calcular, se for 3 ou 4 ele vai fazer a operação da classe que criei para ele, caso contrário ele tem q escolher outra opção.

A classe poligono que criei foi essa

package programacao2;

    public abstract class Poligono {
    private int numerodeLados;

    public int getNumerodeLados() {
        return numerodeLados;
    }

    public void setNumerodeLados(int numerodeLados) {
        this.numerodeLados = numerodeLados;
    }

    public abstract double getcaldulaarea ();


}

A Classe Triangulo

package programacao2;

import java.util.Scanner;

public class Triangulo extends Poligono{
        Scanner valor1 = new Scanner(System.in);
        int base = valor1.nextInt();
        Scanner valor2 = new Scanner (System.in);
        int altura = valor2.nextInt();

    @Override
    public double getcaldulaarea() {
        double area;
        area = base * altura / 2; 
        return area;
    }
    public void imprimedados(){
        System.out.println("A forma para cálculo da área é o Tiângulo");
        System.out.println("Ele tem " + super.getNumerodeLados());
        System.out.println("Sua base mede " + base);
        System.out.println("Sua altura é de" + altura);
        System.out.println("A área calculada do triângulo é de: " + getcaldulaarea());
    }

}

A classe Retangulo

package programacao2;

import java.util.Scanner;

public class Retangulo extends Poligono{
    Scanner valor1 = new Scanner(System.in);
    int tamanho1 = valor1.nextInt();
    Scanner valor2 = new Scanner(System.in);        
    int tamanho2 = valor2.nextInt();

    @Override
    public double getcaldulaarea() {
        double area;
        area = tamanho1 * tamanho2;
        return area;
    }    
        public void imprimedados(){
        System.out.println("A forma para cálculo da área é o Retângulo");
        System.out.println("Ele tem " + super.getNumerodeLados());
        System.out.println("Um lado mede " + tamanho1);
        System.out.println("o outro lado mede " + tamanho2);
        System.out.println("A área calculada do Retângulo é de: " + getcaldulaarea());
    }

}

e a minha classe principal para rodar é essa, mas não sei como fazer as chamadas


package programacao2;

import java.util.Scanner;

public class Principal {

    public static void main(String[] args) {
        Poligono poligono = new Poligono() {
            @Override
            public double getcaldulaarea() {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        };
        System.out.println("Por favor insira o número de lados do polígono:");
        Scanner numerodelados = new Scanner(System.in);
        poligono.setNumerodeLados(numerodelados.nextInt());
        if (numerodelados = 3){

        }
    }
}

eu travei, n entendi como chamar caso a pessoa insira que são três lados como chamo o getcaldulaarea correspondente ao que colocaram?

1 resposta
solução!

Olá Elder, tudo bem ?

Acho que nesse caso o que você pretende seria aproveitar o polimorfismo, não é?

Eu penso em algo nesse sentido:

Retangulo.java

public class Retangulo extends Poligono {
    private double base;
    private double altura;

    public Retangulo(double base, double altura){
        this.base = base;
        this.altura = altura;
    }

    @Override
    public double getCalculoDaArea() {
        return base * altura;
    }
}

Trinagulo.java

public class Triangulo extends Poligono {

    private double base;
    private double altura;

    public Triangulo(double base, double altura){
        this.base = base;
        this.altura = altura;
    }

    @Override
    public double getCalculoDaArea() {
        return (base * altura) / 2;
    }
}

Principal.java

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Poligono poligono = null;

        int quantidade = scanner.nextInt();

        while(quantidade != 3 && quantidade != 4){
            System.out.println("Operação não suportada.");
            quantidade = scanner.nextInt();
        }

        System.out.println("Digite o valor da base: ");
        double base = scanner.nextDouble();

        System.out.println("Digite o valor da altura: ");
        double altura = scanner.nextDouble();

        if(quantidade == 3)
            poligono = new Triangulo(base, altura);
        else
            poligono = new Retangulo(base, altura);

        System.out.println(poligono.getCalculoDaArea());
    }

Faz mais sentido que a classe receba os atributos pelo construtor, ao invés de ter um atributo do tipo Scanner

Agora dado que estamos tratando com um método abstrato para calcular a área não senti muita necessidade desse quantidadeDeLados

Mas você pode explicar um pouco melhor :)

Abraços!