Dúvida exercício

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");
	}

}

Detalhe mais a sua duvida, please !

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.

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 é:
2altura() + 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.

[code]
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;
}
}[/code]

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

   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

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

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.

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:

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 ;-)[/quote]

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.

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