Hallo!
Nachdem ich jetzt schon so einiges in Java programmiert habe, begreife ich immer noch nicht das Problem mit static/non-static....
Ich habe hier folgendes Proramm, dass einige zufällig erzeute Datensätze vom Typ CDatenSart in einem array per Heapsort sortiert. Der einzige Fehler, den ich bekomme, ist in der Main-funktion wenn ich den Heapsort mit der Funktion "Heap (Feldname)" aufrufen will. da sag mir der compiler irgendwas mit static, bla, bla. Was zum Teufel muss ich ändern, damit das funktioniert? und worauf genau muss ich beim Programmieren achten, um so etwas zu vermeiden?
Kann mir das jemand hier erklären?
Ach ja: sollten im Code irgendwelche konventienen verletzt oder ähnliches untypisches sein, wundert euch nicht, der stammt nämlich zu 90% von meinem Prof.!
Vielen Dank!
Nachdem ich jetzt schon so einiges in Java programmiert habe, begreife ich immer noch nicht das Problem mit static/non-static....
Ich habe hier folgendes Proramm, dass einige zufällig erzeute Datensätze vom Typ CDatenSart in einem array per Heapsort sortiert. Der einzige Fehler, den ich bekomme, ist in der Main-funktion wenn ich den Heapsort mit der Funktion "Heap (Feldname)" aufrufen will. da sag mir der compiler irgendwas mit static, bla, bla. Was zum Teufel muss ich ändern, damit das funktioniert? und worauf genau muss ich beim Programmieren achten, um so etwas zu vermeiden?
Kann mir das jemand hier erklären?
Ach ja: sollten im Code irgendwelche konventienen verletzt oder ähnliches untypisches sein, wundert euch nicht, der stammt nämlich zu 90% von meinem Prof.!
Vielen Dank!
Code:
import java.util.Random;
import java.util.Date;
public class Heapsort {
void Senke(CDatenSatz[]Feld,int Vater,int Ende){
CDatenSatz swap = Feld[Vater];
int Sohn, SohnL, SohnR;
int key = swap.key;
while (true) {
SohnL = (Vater << 1) + 1;
if (SohnL > Ende) break;
SohnR = SohnL + 1;
Sohn = SohnL;
if (SohnR <= Ende && Feld[SohnL].key < Feld[SohnR].key)
Sohn = SohnR;
if (Feld[Sohn].key <= key) break;
Feld[Vater] = Feld[Sohn];
Vater = Sohn;
}
Feld[Vater] = swap;
}
void Heap(CDatenSatz[] Feld) {
if(Feld.length<=1) return;
int Ende = Feld.length - 1;
for(int Knoten = Ende/2; Knoten >= 0; Knoten--)
Senke(Feld, Knoten, Ende);
for(int Knoten=Ende; Knoten>=1; Knoten--){
CDatenSatz swap = Feld[Knoten];
Feld[Knoten] = Feld[0];
Feld[0] = swap;
Senke(Feld, 0, Knoten - 1);
}
}
void SenkeUp(CDatenSatz[] Feld,int Vater, int Ende) {
CDatenSatz swap = Feld[Vater];
int Vater0 = Vater;
int Sohn = Vater;
int key = swap.key;
int SohnL, SohnR;
while (true) {
SohnL = (Sohn << 1) + 1;
if (SohnL > Ende) break;
SohnR = SohnL + 1;
if (SohnR <= Ende) {
if (Feld[SohnL].key < Feld[SohnR].key) {
Feld[Sohn]=Feld[SohnR];
Sohn = SohnR;
}
else {
Feld[Sohn] = Feld[SohnL];
Sohn = SohnL;
}
}
else {
Feld[Sohn]=Feld[SohnL];
Sohn = SohnL;
}
}
while (true) {
if (Sohn == 0) {
Feld[0]= swap;
return;
}
Vater = (Sohn-1)/2;
if (Feld[Vater].key < swap.key) {
Feld[Sohn]=Feld[Vater];
Sohn = Vater;
}
else {
Feld[Sohn]=swap;
return;
}
}
}
void HeapUp(CDatenSatz[] Feld) {
if(Feld.length<=1) return;
int Ende = Feld.length - 1;
for(int Knoten=Ende/2; Knoten>=0; Knoten--)
Senke(Feld, Knoten, Ende);
for(int Knoten=Ende; Knoten>=1; Knoten--) {
CDatenSatz swap = Feld[Knoten];
Feld[Knoten] = Feld[0];
Feld[0] = swap;
SenkeUp(Feld, 0, Knoten - 1);
}
}
public static void main (String args[]) {
int elZahl=IO.readInt("Anzahl der Werte?: ");//Eingabe Feldlänge
CDatenSatz[] Feld = new CDatenSatz[elZahl];
Random random = new Random();
for (int i=0; i<elZahl; i++) {
//Erzeugen von Zufallszahlen
Feld[i] = new CDatenSatz(random.nextInt());
//negative Werte filtern
if (Feld[i].getKey()<0) {
int temp = Feld[i].getKey() * -1;
Feld[i].key = temp;
}
//System.out.println("Erzeugtes Array: ");
//System.out.print( Feld[i].getKey()+" ");
}
//arrayAusgeben (test);
long timeA=System.currentTimeMillis();
Heap(Feld);
long timeB=System.currentTimeMillis()-timeA;
//arrayAusgeben (test);
System.out.println("Laufzeit: "+timeB);
}
}
class CDatenSatz {
int key;
public CDatenSatz (int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
public void setKey(int key) {
this.key = key;
}
}