Vererbung

Big_Pat

Mitglied
Hallo liebe User 🙂

ich habe ein kleines Problem bezüglich der Vererbung. Ich hoffe einer hier könnte mir helfen.
Also ich habe zwei Klassen, eine Superklasse "Face" und eine Unterklasse Dreieck. In der Klasse "Face" habe ich eine Array-Variable von Typ "Edge". "Edge" hier ist ein Objekt bzw. eine Seite, die ich dann brauche für die konstruktion eines Dreiecks. Nun meine Frage: könnte mir bitte jemand sagen, wie ich die länge des Edge-Array in der Subklasse auf 3 festlege, so dass ich dann den Dreieck konstruiren kann?
so sieht der Quellcode aus.

Java:
package model;
public abstract class Face {
  private Edge[] edge;
  private Normal normal; 

  public Face(){}

  public Face( Edge[] edge, Normal normal) {
    this.edge = edge;
    this.normal = normal;
  }

  public abstract float getUmfang();
  public abstract float getFlaeche();
  public Edge[] getEdge() {
    return edge;
  }

  public void setEdge(Edge[] edge) {
    this.edge = edge;
  }

  public Normal getNormal() {
    return normal;
  }
 
  public void setNormal(Normal normal) {
    this.normal = normal;
  }
}


Java:
package model;
public class Dreieck extends Face {

  public Dreieck(Edge[] edge, Normal normal) {
    super(edge, normal);
  }

  public Dreieck() { }

  public float getUmfang() {
    return 0;
  }

  public float getFlaeche() {
    return 0;
  }
}

Ich hoffe Ihr versteht, was ich meine. Danke für eine Rückmeldung.

Viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
Du musst deinem Dreieck so und so ein Array mit Edges mitliefern. Du überprüfst einfacht, ob die Länge des Arrays == 3 ist. Sonst wirfst du eine Exception.
 
Erst mal Danke für deinen Beitrag 🙂

Java:
package model;

public class Dreieck extends Face
{
     
    

	
	public Dreieck(Edge[] edge, Normal normal)
	{
		super(edge, normal);
	}
	
	
	

	public float getUmfang()
	{
		for(int i = 0; i < getEdge().length; i++)
		{
			
		}
		return 0;
		
	}
	

	public float getFlaeche() 
	{
		return 0;
	}



}

So ich habe nun die for-Schleife benutzt, um die Länge des Arrays zu ermitteln. Habe dann vor später beim erzeugen neue Instanzen die Anzahl des Edges auf 3 festzulegen. Hast du das so gemeint, Flown??
 
Bitte bei EINEM Problem bei EINEM Thema bleiben.

Nein ich meinte das so:
Java:
package model;
public class Dreieck extends Face {
  public Dreieck(Edge[] edge, Normal normal) {
    if(edge.length != 3) throw new IllegalArgumentException("Triangles only have three edges.");
    super(edge, normal);
  }
  // ...
}
 
sorry bin noch nicht so routiniert in diesem Forum. Deswegen bin ich durcheinander beim posten gekommen, ich gebe mir aber Mühe, um küftig es besser zu machen. Ah ok!!! jetzt verstehe ich was du meinst. Danke sehr🙂. Ich arbeite dann noch an das Projetkt und lade meine Arbeit hier hoch.
 
Guten Abend!
bislang habe ich mit meinem Projetkt nicht weiter kommen können. Dieses mal füge die aufgabe Stellung und die wichtigen klassen ein damit mein problem für euch verständlicher ist. Es geht darum, die wichtigen Klassen einer STL-Datei zu implementireren.
so habe ich mich mit der Aufgabe beschäftigt:

[Java]package model;

public class Vertex
{
private double x;
private double y;
private double z;

public Vertex()
{
x = 0;
y = 0;
z = 0;
}
public Vertex(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}

public double getX()
{
return x;
}
public void setX(double x)
{
this.x = x;
}
public double getY()
{
return y;
}
public void setY(double y)
{
this.y = y;
}
public double getZ()
{
return z;
}
public void setZ(double z)
{
this.z = z;
}

}

package model;

public class Edge
{
private Vertex vertexStart;
private Vertex vertexEnd;

public Edge(Vertex vStart, Vertex vEnd)
{
this.vertexStart = vStart;
this.vertexEnd = vEnd;
}

public double getRichtungsVektor(double x1, double y1, double z1) // Koordinaten Richtungsvektor einer Seite
{
x1 = vertexEnd.getX() - vertexStart.getX();
y1 = vertexEnd.getY() - vertexStart.getY();
z1 = vertexEnd.getZ() - vertexStart.getZ();

return getRichtungsVektor(x1,y1, z1);
}
public double getLaenge()
{
double sum1 = 0;
double sum2 = 0;
double sum3 = 0;
double sum = 0;

sum1 = (double) Math.pow((vertexEnd.getX() - vertexStart.getX()), 2);
sum2 = (double) Math.pow((vertexEnd.getY() - vertexStart.getY()), 2);
sum3 = (double) Math.pow((vertexEnd.getZ() - vertexStart.getZ()), 2);
sum = (double) Math.sqrt(sum1 + sum2 + sum3);
return sum;
}

public Vertex getVertexStart()
{
return vertexStart;
}
public void setVertexStart(Vertex vertexStart)
{
this.vertexStart = vertexStart;
}
public Vertex getVertexEnd()
{
return vertexEnd;
}
public void setVertexEnd(Vertex vEnd)
{
this.vertexEnd = vertexEnd;
}
}

package model;

public abstract class Face
{
private Edge[] edge;
private Normal normal;

public Face()
{
}

public Face( Edge[] edge, Normal normal)
{
this.edge = edge;
this.normal = normal;
}

public double getUmfang()
{
double sum = 0.0;
for(int i = 0; i < edge.length; i++)
sum += edge;
return sum;
}
public abstract double getFlaeche();

public Edge[] getEdge()
{
return edge;
}

public void setEdge(Edge[] edge)
{
this.edge = edge;
}

public Normal getNormal()
{
return normal;
}

public void setNormal(Normal normal)
{
this.normal = normal;
}
}

package model;

public class Dreieck extends Face
{
public Dreieck(Edge edge1 ,Edge edge2, Edge edge3, Normal normal)
{
super(new Edge[] {edge1, edge2, edge3}, normal);
}

public double getUmfang()
{
}

public double getFlaeche()
{
return 0;
}
}

package model;

public class Normal
{
private double n1;
private double n2;
private double n3;

public Normal()
{
}

public Normal(double n1, double n2, double n3)
{
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;
}

public double getN1()
{
return n1;
}
public void setN1(double n1)
{
this.n1 = n1;
}
public double getN2()
{
return n2;
}
public void setN2(double n2)
{
this.n2 = n2;
}
public double getN3()
{
return n3;
}
public void setN3(double n3)
{
this.n3 = n3;
}
}

package model;

import java.util.Vector;

public class Polyeder
{
private String name;
private Vector<Face> dreieck = new Vector< Face>();

public Polyeder()
{
}

public Polyeder(String name, Vector<Face> dreieck)
{
this.name = name;
this.dreieck = dreieck;
}

public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Vector<Face> getDreieck()
{
return dreieck;
}
}
[/Java]

Mein problem ist immer noch die methode "getUmfang()" in der klasse Face. Da habe ich versucht, den Umfang des Dreiecks zu berechnen, indem ich die Summe Array elemente gemacht habe . Aber es wird immer noch ein Fehler angezeigt. Kann einer bitte mir helfen?
 
Zuletzt bearbeitet von einem Moderator:
Java:
package model;

public class Vertex
{
private double x;
private double y;
private double z;


public Vertex()
{
x = 0;
y = 0;
z = 0;

}
public Vertex(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}



public double getX()
{
return x;
}
public void setX(double x)
{
this.x = x;
}
public double getY()
{
return y;
}
public void setY(double y)
{
this.y = y;
}
public double getZ()
{
return z;
}
public void setZ(double z)
{
this.z = z;
}

}


package model;

public class Edge
{
private Vertex vertexStart;
private Vertex vertexEnd;



public Edge(Vertex vStart, Vertex vEnd)
{
this.vertexStart = vStart;
this.vertexEnd = vEnd;
}

public double getRichtungsVektor(double x1, double y1, double z1) // Koordinaten Richtungsvektor einer Seite
{
x1 = vertexEnd.getX() - vertexStart.getX();
y1 = vertexEnd.getY() - vertexStart.getY();
z1 = vertexEnd.getZ() - vertexStart.getZ();

return getRichtungsVektor(x1,y1, z1);

}
public double getLaenge()
{

double sum1 = 0;
double sum2 = 0;
double sum3 = 0;
double sum = 0;

sum1 = (double) Math.pow((vertexEnd.getX() - vertexStart.getX()), 2);
sum2 = (double) Math.pow((vertexEnd.getY() - vertexStart.getY()), 2);
sum3 = (double) Math.pow((vertexEnd.getZ() - vertexStart.getZ()), 2);
sum = (double) Math.sqrt(sum1 + sum2 + sum3);
return sum;
}

public Vertex getVertexStart()
{
return vertexStart;
}
public void setVertexStart(Vertex vertexStart)
{
this.vertexStart = vertexStart;
}
public Vertex getVertexEnd()
{
return vertexEnd;
}
public void setVertexEnd(Vertex vEnd)
{
this.vertexEnd = vertexEnd;
}


}


package model;

public abstract class Face
{

private Edge[] edge;
private Normal normal;

public Face()
{


}

public Face( Edge[] edge, Normal normal)
{
this.edge = edge;
this.normal = normal;
}

public double getUmfang()
{
double sum = 0.0;
for(int i = 0; i < edge.length; i++)
sum += edge[i];
return sum;
}
public abstract double getFlaeche();

public Edge[] getEdge()
{
return edge;
}

public void setEdge(Edge[] edge)
{
this.edge = edge;
}

public Normal getNormal()
{
return normal;
}

public void setNormal(Normal normal)
{
this.normal = normal;
}





}


package model;

public class Dreieck extends Face
{



public Dreieck(Edge edge1 ,Edge edge2, Edge edge3, Normal normal)
{
super(new Edge[] {edge1, edge2, edge3}, normal);


}


public double getUmfang()
{

}

public double getFlaeche()
{
return 0;
}



}


package model;

public class Normal
{
private double n1;
private double n2;
private double n3;


public Normal()
{

}

public Normal(double n1, double n2, double n3)
{
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;
}

public double getN1()
{
return n1;
}
public void setN1(double n1)
{
this.n1 = n1;
}
public double getN2()
{
return n2;
}
public void setN2(double n2)
{
this.n2 = n2;
}
public double getN3()
{
return n3;
}
public void setN3(double n3)
{
this.n3 = n3;
}


}


ackage model;

import java.util.Vector;

public class Polyeder
{
private String name;
private Vector<Face> dreieck = new Vector< Face>();

public Polyeder()
{

}

public Polyeder(String name, Vector<Face> dreieck)
{
this.name = name;
this.dreieck = dreieck;
}


public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Vector<Face> getDreieck()
{
return dreieck;


}

}

hier noch mal der code
 
Handelt es sich immer noch um das selbe Problem wie im Anfangspost dieses Threads? Wenn nein dann mache bitte ein neues Thema auf! 🙂
Achtung: nur weil es im selben Projekt ist kann das Problem trotzdem ein anderes sein 😉

Außerdem ist es hilfreicher die Klassen jeweils seperat in Java-Tags zu posten, das erspart eine Menge herumscrollen.
 
Hallo,
nun Habe ich eine Lösung für mein problem gefunden und teile die jetzt mit den anderen Usern. Ich habe den Konstruktor "Dreieck()" von der Kalsse Dreieck nun anders formuliert und am Ende habe ich eher ein Gutes ergebnis bekommen.
Also es ging darum, dass ich nicht wusste, ertens, wie ich die Länge des Array "Edge[] edge" von der Superklasse Face, in der Unterklasse Dreieck so spezifiziere, dass ich da nur 3 Elemente(edge1, edge2 und edge3) habe. zweitens war es mir auch unklar, wie ich dann auf die drei Elemente zugreife, um die Methode "getFlaesche()" ausformulieren zu können.
so sah meine Klasse Dreieck aus:
[Java] package model;
public class Dreieck extends Face {

public Dreieck(Edge[] edge, Normal normal) {
super(edge, normal);
}

public Dreieck() { }

public float getUmfang() {
return 0;
}

public float getFlaeche() {
return 0;
}
}[/Java]


und So sieht das ganze jetzt aus:
[Java]package model;

public abstract class Face
{

private Edge[] edge;
private Normal normal;

public Face()
{


}

public Face( Edge[] edge, Normal normal)
{
this.edge = edge;
this.normal = normal;
}

public double getUmfang(double x1, double y1, double z1)
{
double sum = 0.0;
for(int i = 0; i < edge.length; i++)
{
sum += edge.getLaenge();
}
return sum;
}
public abstract double getFlaeche();

public Edge[] getEdge()
{
return edge;
}

public void setEdge(Edge[] edge)
{
this.edge = edge;
}

public Normal getNormal()
{
return normal;
}

public void setNormal(Normal normal)
{
this.normal = normal;
}[/Java]


[Java]package model;

public class Dreieck extends Face
{



public Dreieck(Edge edge1 ,Edge edge2, Edge edge3, Normal normal)
{
super(new Edge[] {edge1, edge2, edge3}, normal);

}

public double getFlaeche()
{

double flaeche = 0;
flaeche = (Math.sqrt(4*Math.pow(getEdge()[0].getLaenge(), 2)*Math.pow(getEdge()[1].getLaenge(), 2)
-( Math.pow((Math.pow(getEdge()[0].getLaenge(), 2) + Math.pow(getEdge()[1].getLaenge(), 2)
- Math.pow(getEdge()[2].getLaenge(), 2) ), 2))))/4; // Satz des Heron
return flaeche;

}


}[/Java]

Gruß
 
Zuletzt bearbeitet:
also Arrays kannst du erzeugen, ObjectTyp[] variablenName =new ObjectTyp[ zellenzahl]; oder
ObjectTyp[] variablenName ={ ObjectTyp1, ObjectTyp2, ... ObjectTypN};
du hast jetzt leere schubladen für Objekte vom typ ObjectTyp, ohne inhalt, bzw. bei der zweiten Variante mit inhalt.
bei der Variante 2 befüllst du die schublade über variablenName[ index] =new ObjectTyp(); Arrayindex beginnt mit 0 und geht bis zellenzahl-1;

der zugriff erfolgt auf die gleiche weise: variablenName[ index] (erste schublade = variablenNamen[ 0]).
 

Zurück
Oben