Programação Java

Alguem poderia me ajudar a resolver

  1. Crie a seguinte hierarquia de classes de figuras geométricas. Veja na figura as
    fórmulas:
    a. A classe abstrata Figura deve ter o método abstrato area.
    b. A classe concreta Circulo é subclasse de Figura.
    c. A classe abstrata Poligono é subclasse de Figura e deve ter os atributos base e
    altura .
    d. As classes concretas Triangulo, Losango, Retangulo e Quadrado são subclasses
    de Poligono. Tente criar mais uma generalização aqui olhando as fórmulas da área.
    e. Os polígonos Retangulo e Quadrado devem implementar a interface Diagonal,
    que deve ter um método que calcula a diagonal.
    f. Crie uma classe Geometria com um ArrayList de Figuras com pelo menos uma
    figura de cada e imprima suas áreas, perímetros e diagonais.
  2. Implemente agora o método abstrato perímetro na classe Figura. Como
    consequência, você terá que implementá-lo em todas as classes concretas.
  3. Crie a classe concreta Trapezio. De quem ela deve ser subclasse?
  4. Altere a sua herarquia de classes para agora calcular também o volume. Crie as
    classes Cubo, Esfera, Cilindro e Piramide. É melhor resolver por herança ou por
    composição?

Olá @rodrigo98

Você já começou a fazer? Tem alguma dúvida?

@Mike, desculpa se intrometer! Sou novo aqui, acompanho o forum de voces a um tempo e nunca me cadastrei…

Enfim tenho esse mesmo problema que esse rapaz acima!.. Acredito que conseguir fazer ate a letra “E” da 1 e agora estou com dificuldade com isso de ArrayList =/

Obg,

import java.util.ArrayList;

public class Geometria{

public static void main (String[] args){

  ArrayList<Figura> figuras = new ArrayList<>();
  
  figuras.add(new Circulo(3));
  figuras.add(new Losango(3,3,3,3));
  figuras.add(new Retangulo(5,3));
  figuras.add(new Quadrado(2,2));
  figuras.add(new Triangulo(3,2,2));

}
}

Estou nessa parte…

Esta dando algum erro?
Esta com problemas para exibir?

----jGRASP exec: javac -g Geometria.java
Geometria.java:9: error: constructor Circulo in class Circulo cannot be applied to given types;
figuras.add(new Circulo(3));
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length
Geometria.java:10: error: constructor Losango in class Losango cannot be applied to given types;
figuras.add(new Losango(3,3,3,3));
^
required: int,int
found: int,int,int,int
reason: actual and formal argument lists differ in length
Geometria.java:13: error: constructor Triangulo in class Triangulo cannot be applied to given types;
figuras.add(new Triangulo(3,2,2));
^
required: int,int
found: int,int,int
reason: actual and formal argument lists differ in length
Retangulo.java:12: error: cannot find symbol
return ((Math.pow(this.altura(), 2) + Math.pow(this.base(), 2)) * 0.5);
^
symbol: method altura()
Retangulo.java:12: error: cannot find symbol
return ((Math.pow(this.altura(), 2) + Math.pow(this.base(), 2)) * 0.5);
^
symbol: method base()
5 errors

Esta dando esse erro… Esta errado essa forma que eu fiz ? e sim também estou com problemas para exibir…

Aparentemente é problema no construtor e na linha 12 da classe Retangulo, se você puder postar…

Construtor do Poligono?

public abstract class Poligono extends Figura {

private int base;
private int altura;

public Poligono(int base, int altura) {
	this.altura = altura;
	this.base = base;
}



public int getBase() {
	return base;
}


public void setBase(int base) {
	this.base = base;
}


public int getAltura() {
	return altura;
}


public void setAltura(int altura) {
	this.altura = altura;
}

@Override
double area() {
	return (getAltura ()*getBase());
}

}

public class Retangulo extends Poligono implements Diagonal {

public Retangulo(int base, int altura) {
	super(base, altura);
	
}

@Override
public double calcularDiag() {

	return ((Math.pow(altura(), 2) + Math.pow(base(), 2)) * 0.5);
}

}

Obg, amigo!

Parece que os erros são pelas quantidade de lados que coloquei nas classes

Sim, olha a quantidade de parametros que você esta passando no construtor em:

new Losango(3,3,3,3);

E olha na classe Losango

A mesma coisa vale para a classe Circulo e Triangulo

1 curtida

Pelo que eu vi, você tem um método chamado getAltura() e getBase() ao invés de altura() e base()

1 curtida

Era isso mesmo, consegui arrumar isso! Mais uma duvida, é normal o losango ter 2 parâmetros? o resto foi corrigido, teria que fazer um toString nas classes que vou precisar exibir?

Se o parâmetro for para medir a área, eu não vejo necessidade, pois um losango tem os 4 lados iguais.

Não precisa, não sei se você aprendeu como iterar uma lista, mas seria basicamente isso:

for(Figura figura: figuras) {
    System.out.println(figura.metodo1() + ", " + figura.metodo2());
}

Se você sobreescrever o toString(), só irá ser necessário colocar o objeto no sysout:

for(Figura figura: figuras) {
    System.out.println(figura);
}
1 curtida

Não aprendi muito bem, infelizmente meu professor tem uma péssima didática e todo mundo da classe ta super confuso… mais enfim, nao entendi muito bem esse for que vc fez…

Você tem um ArrayList chamado figuras que permite apenas objetos do tipo Figura nele, certo?

Você o declarou assim:

ArrayList<Figura> figuras = new ArrayList<>();

Vamos ao for:

for(Figura

Esse Figura é o que esta dentro do operador diamond (<>): ArrayList< Figura>

for(Figura meuObjetoDaLista

A palavra meuObjetoDaLista é o objeto que representa cada posição do arrayList (pode ter qualquer nome ali). É o objeto da iteração atual

for(Figura meuObjetoDaLista: figuras) {

}

O figuras que vem depois dos dois pontos, é o seu próprio ArrayList.

Os dois for abaixo são equivalentes

for(int i = 0; i < figuras.size(); i++) {
    System.out.println(figuras.get(i).metodo1());//figuras.get(i) retorna o objeto do ArrayList da posição i
}
for(Figura figura: figuras) {
    System.out.println(figura.metodo1());
}

O segundo for é mais usado e ele é chamado de Enhanced For

Há outras formas de iterar uma lista, mas não vem ao caso.

Olá, também tive o mesmo problema, porém utilizei lombok.
Não consegui resolver ainda. Alguma dica?
Agradeço antecipadamente.

java: constructor Filme in class br.com.algaworks.filmes.model.Filme cannot be applied to given types;
required: no arguments
found: java.lang.Long,java.lang.String,java.lang.String
reason: actual and formal argument lists differ in length

package br.com.algaworks.filmes.model;

public class Filme {

private Long codigo;
private String titulo;
private String descricao;

}

@WebMvcTest
public class FilmeControllerTest {

@Autowired
private FilmeController filmeController;

@MockBean
private FilmeService filmeService;

@BeforeEach
public void setup() {
    standaloneSetup(this.filmeController);
}

@Test
public void deveRetornarSucesso_QuandoBuscarFilme() {

    when(this.filmeService.obterFilme(1L))
            .thenReturn(new Filme(1L, "O Poderoso Chefão", "Sem descrição"));
    given()
            .accept(ContentType.JSON)
            .when()
            .get("/filmes/{codigo}", 1L)
            .then()
            .statusCode(HttpStatus.OK.value());
}

@Test
public void deveRetornarNaoEncontrado_QuandoBuscarFilme(){

    when(this.filmeService.obterFilme(5L))
            .thenReturn(null);
    given()
            .accept(ContentType.JSON)
            .when()
            .get("/filmes/{codigo}", 5L)
            .then()
            .statusCode(HttpStatus.NOT_FOUND.value());
}

@Test
public void deveRetornarBadRequest_QuandoBuscarFilme(){

    given()
            .accept(ContentType.JSON)
            .when()
            .get("/filmes/{codigo}", -1L)
            .then()
            .statusCode(HttpStatus.BAD_REQUEST.value());

   verify(this.filmeService, never()).obterFilme(-1L);

}

}

Você está tentando instanciar a classe Filme passando um Long e duas String como parâmetro, mas a sua classe só possui o construtor sem parâmetros.
:man_shrugging:

alguém teria esse mesmo código só que para c++
?

Olá, seja bem vindo ao fórum.

A cultura aqui é não dar as respostas prontas, mas ajudar a tirar dúvidas. Então cria um novo tópico e posta lá o que você já fez, e quais suas dúvidas específicas.

Bons estudos!