ciccionamente90
20-04-2013, 13:48
Buongiorno a tutti, vi do subito il codice completo. Non spaventatevi: la domanda dovrebbe riguardare le sole prime 10 righe:
public class Triangolo implements Cloneable{
private double catetoA;
private double catetoB;
private double ipotenusa;
private TipoTriangolo tipo = null;
public Triangolo(Double lato) {
super();
this.catetoA = lato;
this.catetoB = lato;
this.ipotenusa = lato;
tipo = TipoTriangolo.EQUILATERO;
}
public Triangolo(Double cateto, Double ipotenusa) {
super();
this.catetoA = cateto;
this.catetoB = cateto;
this.ipotenusa = ipotenusa;
if(cateto.doubleValue() == ipotenusa.doubleValue()){
tipo = TipoTriangolo.EQUILATERO;
}else tipo = TipoTriangolo.ISOSCELE;
}
public Triangolo(Double catetoA, Double catetoB, Double ipotenusa) {
super();
this.catetoA = catetoA;
this.catetoB = catetoB;
this.ipotenusa = ipotenusa;
if(catetoA.doubleValue() == catetoB.doubleValue() && catetoA.doubleValue() == ipotenusa.doubleValue() ){
tipo = TipoTriangolo.EQUILATERO;
}else if(catetoA == catetoB ){
tipo = TipoTriangolo.ISOSCELE;
}else tipo = TipoTriangolo.SCALENO;
}
public Double getPerimetro(){
return catetoB + catetoA + ipotenusa;
}
private double getSemiPerimetro(){
return getPerimetro()/2 ;
}
public boolean isIsoscele(){
if(tipo == TipoTriangolo.ISOSCELE)
return true;
return false;
}
public boolean isEquilatero(){
if(tipo == TipoTriangolo.EQUILATERO)
return true;
return false;
}
public double getArea(){
return Math.sqrt(getSemiPerimetro()*(getSemiPerimetro()-catetoA)*(getSemiPerimetro()-catetoB)*(getSemiPerimetro()-ipotenusa));
}
@Override
public String toString() {
return "Triangolo " + tipo + " [catetoA=" + catetoA + ", catetoB=" + catetoB
+ ", ipotenusa=" + ipotenusa + "] - Area: "+
(((double)Math.round((this.getArea()*100)))/100)+
" - Perimetro: "+this.getPerimetro();
}
public Object clone(){
return new Triangolo(catetoA, catetoB, ipotenusa);
}
}
Si tratta di un esempio banale per mostrare il comportamento dei costruttori e dell'override (motivo per il quale si implementa Cloneable).
TipoTriangolo è un ENUM definito a parte.
Mi chiedevo per quale motivo, all'inizio dei costruttori, sia stato inserito super(); pur non essendoci nessuna superclasse (come anche nessun costruttore il quale non riceve alcun parametro in ingresso).
Vi ringrazio anticipatamente.
Ciawa.
public class Triangolo implements Cloneable{
private double catetoA;
private double catetoB;
private double ipotenusa;
private TipoTriangolo tipo = null;
public Triangolo(Double lato) {
super();
this.catetoA = lato;
this.catetoB = lato;
this.ipotenusa = lato;
tipo = TipoTriangolo.EQUILATERO;
}
public Triangolo(Double cateto, Double ipotenusa) {
super();
this.catetoA = cateto;
this.catetoB = cateto;
this.ipotenusa = ipotenusa;
if(cateto.doubleValue() == ipotenusa.doubleValue()){
tipo = TipoTriangolo.EQUILATERO;
}else tipo = TipoTriangolo.ISOSCELE;
}
public Triangolo(Double catetoA, Double catetoB, Double ipotenusa) {
super();
this.catetoA = catetoA;
this.catetoB = catetoB;
this.ipotenusa = ipotenusa;
if(catetoA.doubleValue() == catetoB.doubleValue() && catetoA.doubleValue() == ipotenusa.doubleValue() ){
tipo = TipoTriangolo.EQUILATERO;
}else if(catetoA == catetoB ){
tipo = TipoTriangolo.ISOSCELE;
}else tipo = TipoTriangolo.SCALENO;
}
public Double getPerimetro(){
return catetoB + catetoA + ipotenusa;
}
private double getSemiPerimetro(){
return getPerimetro()/2 ;
}
public boolean isIsoscele(){
if(tipo == TipoTriangolo.ISOSCELE)
return true;
return false;
}
public boolean isEquilatero(){
if(tipo == TipoTriangolo.EQUILATERO)
return true;
return false;
}
public double getArea(){
return Math.sqrt(getSemiPerimetro()*(getSemiPerimetro()-catetoA)*(getSemiPerimetro()-catetoB)*(getSemiPerimetro()-ipotenusa));
}
@Override
public String toString() {
return "Triangolo " + tipo + " [catetoA=" + catetoA + ", catetoB=" + catetoB
+ ", ipotenusa=" + ipotenusa + "] - Area: "+
(((double)Math.round((this.getArea()*100)))/100)+
" - Perimetro: "+this.getPerimetro();
}
public Object clone(){
return new Triangolo(catetoA, catetoB, ipotenusa);
}
}
Si tratta di un esempio banale per mostrare il comportamento dei costruttori e dell'override (motivo per il quale si implementa Cloneable).
TipoTriangolo è un ENUM definito a parte.
Mi chiedevo per quale motivo, all'inizio dei costruttori, sia stato inserito super(); pur non essendoci nessuna superclasse (come anche nessun costruttore il quale non riceve alcun parametro in ingresso).
Vi ringrazio anticipatamente.
Ciawa.