Ich habe ein Programm geschrieben, welches eine beliebige Anzahl Punkte einliest (also X,Y,Z) Koordinaten und in einem Array speichert. Weiterhin kann man im Programm eine maximale Steigung angeben welche nicht überschritten werden soll und in einem anderen SChritt, wird jeweils die Steigung zwischen den Punkten berechnet, also Steigung zwischen Punkt 1 und Punkt 2...dann Steigung zwischen Punkt 2 und Punkt 3 dann zwischen 3 und 4 etc. Nun möchte ich, dass wenn die Steigung zwischen 2 Punkten über dem eingegeben Grenzwert liegt der zweite Punkt gelöscht wird also mit allen 3 Koordinaten und die steigung dann zum nächsten Punkt berechnet wird, das Programm also nur die Steigungen berechnet, die unter dem Grenzwert liegen.
Ich hoffe ihr versteht was ich meine. habt ihr eine Idee wie man sowas machen könnte ?
Hier der Code
Java:
importjava.lang.Math;publicclassProjekt_test{publicstaticvoidmain(String[] args){StdOut.print("Gib die maximale Steigung ein");double maxSt =StdIn.readDouble();StdOut.print("Gib die Anzahl von Punkten:");double x,y,z;int n =StdIn.readInt();double[][] a=newdouble[n][3];for(int i =0; i < n; i++){StdOut.print("Gib die ");StdOut.print(i+1);StdOut.println(". X-Koordinate");
x=StdIn.readDouble();
a[i][0]= x;StdOut.print("Gib die ");StdOut.print(i+1);StdOut.println(". Y-Koordinate");
y=StdIn.readDouble();
a[i][1]= y;StdOut.print("Gib die ");StdOut.print(i+1);StdOut.println(". Z-Koordinate");
z=StdIn.readDouble();
a[i][2]= z;}double[] l=newdouble[n-1];// Hier werden Subklassen erstelltdouble[] h=newdouble[n-1];double[] g=newdouble[n-1];double[] steigung=newdouble[n-1];for(int i=0;i<n-1;i++){// Arraystartwert bei soll abbrechen wenn i um eine Einheit kleiner ist als die Anzahl Arrayglieder
l[i]=Math.sqrt((Math.pow(a[i+1][0]-a[i][0],2.0)+Math.pow(a[i+1][1]-a[i][1],2.0))+Math.pow(a[i+1][2]-a[i][2],2.0));
g[i]=Math.sqrt((Math.pow(a[i+1][0]-a[i][0],2.0)+Math.pow(a[i+1][1]-a[i][1],2.0)));
h[i]=a[i+1][2]-a[i][2];
steigung[i]=(h[i]/g[i])*100;}double xyz=0;for(int i=0;i<n-1;i++){if(steigung[i]>maxSt){// Hier möchte ich dass das Programm den Arrayeintrag löscht und das Array auch kürzt so dass nicht eine Lücke entsteht}}}[\JAVA]GrussExcept
class Punkt {
double x,y,z;
double steigung;
public Punkt(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
//getter und setter...
}
und dann eine
Code:
ArrayList<Punkt> punkte = new ArrayList<Punkt>();
erstellen.
Nun noch eine Funktion schreiben, welche eben den Vergleich macht und eventuell dann punkte.remove(int index) aufrufen.
Und dann noch den Rest machen, den du beschreibst .
Gruß
EDIT: Ein Array hat eine feste Größe, eine ArrayList eben nicht.
Kann ich einfach eine neue Unterklasse erstellen wo ich die Punkte nochmals einlese in eine Arraylist ?Muss ich die Arraylist nicht schon oben definieren ?
Könntest du mir deinen Ansatz mal in meinen Code einbauen oder einen vermerk machen wo ich diese einbauen soll ? Habe bisher noch nicht mir arraylists gearbeitet
Kann ich einfach eine neue Unterklasse erstellen wo ich die Punkte nochmals einlese in eine Arraylist ?Muss ich die Arraylist nicht schon oben definieren ?
Könntest du mir deinen Ansatz mal in meinen Code einbauen oder einen vermerk machen wo ich diese einbauen soll ? Habe bisher noch nicht mir arraylists gearbeitet
Die ArrayList ist eig ein grundlegendes Konstrukt, welches du auf jedenfall lernen solltest.
Lies dir die Dokumentation durch ArrayList (Java Platform SE 7 ) .
Oder kauf dir ein Java-Grundlagen-Buch, denn wie es aussieht ist dein Code sehr unübersichtlich, unkommentiert und unstrukturiert.
Ich stimme dem Ansatz von qwert zu.