Dúvida exercício

9 respostas
R

Enunciado:
Cria uma classe Retangulo, Essa classe armazena somente as coordenadas cartesianas dos quatro vértices do retangulo.Os valores nao podem ser maiores que 20.0, Fornecer métodos para calcular length,width,perimeter,area.O comprimento é o maior das duas dimensões.

Estou dúvidas como implementar alguns métodos.Conforme os comentários.
O código acho que está bem enrolado.

public class Retangulo {
double c1;
double c2;
double c3;
double c4;

private static int totalErros;

	//construtor
	public Retangulo(double coordenada, double coordenada2, double coordenada3, double coordenada4){
		this.c1 = coordenada;
		this.c2 = coordenada2;
		this.c3 = coordenada3;
		this.c4 = coordenada4;
	}
	
	public void setC1(double c1){
		if (c1 > 20.0 || c1 < 0.0)
			totalErros++;
	}
	
	public void setC2(double c1){
		if (c2 > 20.0 || c4 < 0.0)
			totalErros++;
	}
	
	public void setC3(double c1){
		if (c3 > 20.0 || c4 < 0.0)
			totalErros++;
	}
	
	public void setC4(double c1){
		if (c4 > 20.0 || c4 < 0.0)
			totalErros++;
	}
	
	public void length(){
		//dúvida
	}
	
	public void width(){
		//dúvida
	}
	
	public void perimeter(){
		//dúvida lado + lado + lado + lado
	}
	
	public void area(){
		//dúvida width * length
	}
	public void desenhaRetangulo(){
		if (totalErros != 0)
			System.out.println("Algum número é invalido");
	}

public void isSquare(){
		if (c1 == c2 && c2 == c3 && c3 == c4)
			System.out.println("É quadrado");
		else
			System.out.println("Não é quadrado");
	}

}

9 Respostas

gpd38

Detalhe mais a sua duvida, please !

R

Eu vou passar como argumento as coordenadas.Só que eu passo 1 valor ou teria que passar no formato(x, y)
e a partir dessas 4 coordenadas das vertices eu tenho que ver a largura a altura.Descobrindo isso fica facil ver a area,tipo grafico cartesiano.

ViniGodoy

Ok... comece dando nomes mais significativos.

Em primeiro lugar, você terá 2 coordenadas no eixo cartesiano, que se referem ao x1, y1 (coordenada superior esquerda) e x2, y2 (inferior direita). Mais do que isso seria desperdício. Eu também tiraria fora aqueles métodos setters. Ou faria setters que só envolvesse passar x e y juntos. É mais natural desse jeito.

A altura de um retângulo é dada por x2 - x1.
A largura por y2 - y1. Sempre em valores absolutos.

O perímetro é a soma de todos os lados. Ora, como todas as laterais paralelas tem a mesma medida, e essa medida se refere a altura ou a largura, então o perímetro é:
2*altura() + 2* largura() ou, simplesmente, 2*(altura + largura).

O área é altura() * largura().

Ele é um quadrado se a largura == altura e se ambos forem diferentes de 0.

public class Retangulo {
   double x1;
   double y1;
   double x2;
   double y2;

	//construtor
   public Retangulo(double x1, double y1, double x2, double y2){
      this.x1 = x1;
      this.y2 = x2;
      this.x1 = y1;
      this.y2 = y2;
   }
	
   public int height(){
      return Math.abs(x1 - x2);
   }
	
   public void width(){
      return Math.abs(y1 - y2);
   }
	
   public void perimeter(){
      return 2* (width() + height());
   }
	
   public void area(){
      return width() * height();
   }

   public boolena isSquare(){
      return width() == height() && width() != 0;
   }
}

Removi a variável "totalErros" pq ela não fazia sentido.

J
Cara nao fiz a solucao completa, mais esta vai te dar uma boa visao para voce completar o seu problema

   Classe Ponto
public class Ponto {

private double x,y;

private static int totalErros=0;

public ponto(int x, inty) {

this.x = x;
   this.y = y;

}

public void setX(double x) {
    if (x>0 && x<20.0)
       totalErros++;
    else
       this.x = x;
}

public void setY(double y) {
    if (y>0 && y<=20.0)
        totalErros++;
    else
       this.y = y;
}

public double CalculaDistancia(Ponto pto) {

   double cx, cy;

   cx = this.x - pto.x;
   cy = this.y - pto.y;

   return Math.sqrt((cx*cx) + (cy*cy));
}

}

Classe Retangulo
public class Retangulo {

private Ponto c1;

private Ponto c2;

private Ponto c3;

private Ponto c4;
public Retangulo(Ponto c1, Ponto c2, Ponto c3, Pontoo c4) {

this.c1 = c1;

this.c2 = c2;

this.c3 = c3;

this.c4 = c4;

}
public void width(){

this.c1.CalculaDistancia(this.c2);

}
public void height(){

this.c2.CalculaDistancia(this.c3);

}
public double perimeter(){

return (this.width() + this.height() + this.width() + this.height());

}
public double  area(){

return (this.width()*this.height());

}
public void desenhaRetangulo() {

if (totalErros != 0)

System.out.println(Algum número é invalido);

}
public void isSquare() {

if (c1.equals(c2) && (c2.equals(c3) && c3.equals(c4))

System.out.println(É quadrado);

else

System.out.println(Não é quadrado);

}

}

o resto vai da sua imaginacao

abracos

R

valeu, a todos que ajudaram, valeu vinigodoy codigo bem simples e “limpo”, fiz varias gambiarras para tentar resolver.

ViniGodoy

Júnior,

Quando for postar códigos, faça a gentileza de usar a tag code. É o que deixou os nossos códigos formatados. :slight_smile:

Dá uma lida aqui se ainda não aprendeu a fazer isso:
http://www.guj.com.br/posts/list/50115.java

Outra coisa. Um quadrado não terá os quadro pontos iguais, por isso seu método isSquare está errado. Você também não definiu o equals da classe ponto e, por padrão, o equals compara com ==.

Fornecendo 4 pontos, além de retângulos você pode também formar trapézios, ou inclinar o retângulo. Isso complica muito a matemática. Então o ideal é fornecer mesmo só 2 pontos, e fazer o quadrado alinhado com os eixos.

peczenyj

De uma lida nesse artigo sobre pré, pós condições e invariantes:

http://fragmental.com.br/wiki/index.php/Contratos_Nulos

edit: eu criaria a classe Ponto e meus atributos da classe Quadrilatero seriam 4 vertices dessa classe. Cada vertice tem 1 coordenada X e 1 coordenada Y, logo vc tem que lidar com 8 valores distintos, sendo que faz mais sentido 4 Pontos :wink:

A classe Ponto poderia ter algumas operações matemáticas :wink:

ViniGodoy

De uma lida nesse artigo sobre pré, pós condições e invariantes:

http://fragmental.com.br/wiki/index.php/Contratos_Nulos

edit: eu criaria a classe Ponto e meus atributos da classe Quadrilatero seriam 4 vertices dessa classe. Cada vertice tem 1 coordenada X e 1 coordenada Y, logo vc tem que lidar com 8 valores distintos, sendo que faz mais sentido 4 Pontos :wink:

A classe Ponto poderia ter algumas operações matemáticas ;-)

Só daí tem que tomar o cuidado para a classe Retangulo não deixar definir Trapézios.
Mas para uma classe quadrilátero mais genérica, eu também faria assim.

peczenyj

Num mundo perfeito, a classe Retângulo seria uma extensão de Quadrilátero (que poderia ser abstrato), com algumas restrições?

Criado 5 de abril de 2008
Ultima resposta 7 de abr. de 2008
Respostas 9
Participantes 5