Klassen Record wie in Pascal

Mathias1000

Mitglied
Wieso geht dies nicht ?

Ich will Vector und Normal in einen Record packen.
Nur kommt bei StutzenBuffer.Vector schon ein Fehler.

Java:
	public class  TBuffer{
		public FloatBuffer Vector;
		public FloatBuffer Normal;
	}
	
	TBuffer StutzenBuffer;
	StutzenBuffer.Vector = GetBuffer(FluegeliVectoren.FluegeliVectoren);
	StutzenBuffer.Normal = GetBuffer(FluegeliNormale.FluegeliNormale);


//  Diese Zeilen will ich durch den Record ersetzten.
	private final FloatBuffer FluegeliVectorBuffer = GetBuffer(FluegeliVectoren.FluegeliVectoren);
	private final FloatBuffer FluegeliNormalBuffer = GetBuffer(FluegeliNormale.FluegeliNormale);
Auch in einer einfachen Variante geht es nicht.
Java:
	public class  TTest{
		int Vector;
		int Normal;
	}
	
	TTest Test;
	Test.Vector=1;
Ich benutze Eclipse.
 
Zuletzt bearbeitet:

eMmiE

Bekanntes Mitglied
Du willst also mithilfe einer Klasse verschiedene Variablen bündeln und dann mithilfe von Objekten dieser Klasse darauf zugreifen

Eine Klasse in Java ist generell so aufgabaut:
-Variablendeklaration -> Welche Variablen soll das Objekt enthalten?

-Konstruktor -> was soll das Programm machen, wenn ein Objekt dieser Klasse erstellt wird?
Da werden z.B. Werte gesetzt, also Parameter übernommen.

-Methoden -> was soll das Programm von sich aus (mithilfe diese Methoden) mit den Variablen und anderen Variablen anstellen?

Die einfachste Lösung in deinem Fall wäre imho das hier:
Code:
public class TTest {
//Deklaration
int Vector;
int wasauchimmer;

//Konstruktor
public TTest(/*werte,die übernommen werden sollen, z.B.:*/int vec,int rest) {
this.Vector = vec;
this.wasauchimmer = rest;
}
}

Um jetzt mit den Variablen zu arbeiten musst du erstmal ein lauffähiges Programm schreiben

Die einfachste Methode, so was in Java zu machen ist, eine
Code:
public static void main(String[] args)
-Methode einzufügen, in der so etwas wie Direkteingaben gemacht werden

Falls du es noch nicht kennst:
Mit System.out.println() werde ich im Folgenden Werte ausgeben, die dan auf der Konsole erscheinen


Für deine Klasse heißt das:
Code:
public class TTest {
  //Deklaration
  public int Vector;
  public int wasauchimmer;

  //Konstruktor 
  public TTest(/*werte,die übernommen werden sollen, z.B.:*/int vec,int rest) {
  this.Vector = vec;
  this.wasauchimmer = rest;
  }

  public static void main(String[] args) {
    //Neues Objekt der Klasse anlegen
    TTest t = new TTest(0,1);
    //dieser Zugriff auf die Variablen ist möglich, da diese public sind
    int ergebnis = t.Vector + t.wasauchimmer;
    System.out.println("Ergebnis ist: "+ergebnis);
  }
}

Das was ich grad über "DIE Startmethode" gemacht habe, kann man auch innerhalb von anderen Klassen machen.
Soweit ich weiß, gibt es aber keine andere Möglichkeit, ein Programm in Java zu beginnen, also der JVM, der "ausführenden Gewalt", zu sagen, wo sie anfangen soll zu arbeiten, als mit "der Startmethode".

Wenn du das jetzt innerhalb einer anderen Klasse machen willst, dann musst du die sowieso mit "der Startmethode"

EDIT: beim instanzieren eines neuen Objekts einer Klasse werden immer die Befehle im Konstruktor abgearbeitet

Gruß eMmiE

P.S.: sry, falls ich deine Java-Künste jetzt vollkommen unterschätzt haben sollte, aber das was ich sah, sah noch nicht nach Java aus :noe:
 

Mathias1000

Mitglied
Ich habe es jetzt so gemacht wie du geschrieben hat.
Aber jetzt motzt er bei [c]TTest Test1 = new TTest(1,0);[/c].

Java:
public class HelloWorld {

	public class TTest {
		public int a;
		public int b;

		public TTest(int aa, int bb) {
			this.a = aa;
			this.b = bb;
		}
	}
	
	public static void main(String[] args) {

		TTest Test1 = new TTest(1,0);
		TTest Test2 = new TTest(1,0);		

		Test1.a = 1;
		Test1.b = 2;
		
		Test2.a = 3;
		Test2.b = 4;		
	}
}
 

X5-599

Top Contributor
Das liegt daran, daß du die Klasse TTest in der Klasse HelloWorld implementiert hast und darauf von einer statischen Methode aus zugreifen willst. Da das so nicht funktioniert kannst du entweder so etwas machen:

Java:
public class HelloWorld {

   public class TTest {
            public int a;
            public int b;
 
            public TTest(int aa, int bb) {
                this.a = aa;
                this.b = bb;
            }
    }

    public static void main(String[] args)
    {
        TTest Test1 = new HelloWorld().new TTest(1,0);
    }
}

oder

Java:
public class HelloWorld {

    public static class TTest {
            public int a;
            public int b;
 
            public TTest(int aa, int bb) {
                this.a = aa;
                this.b = bb;
            }
    }

    public static void main(String[] args)
    {
        TTest Test1 = new TTest(1,0);
    }
}

Wenn du von einer nicht statischen Methode aus auf TTest zugreifen würdest, dann wären keinerlei Anpassungen nötig. zB:

Java:
public class HelloWorld {

    public class TTest {
            public int a;
            public int b;
 
            public TTest(int aa, int bb) {
                this.a = aa;
                this.b = bb;
            }
    }

    public void irgendeineMethode()
    {
        TTest Test1 = new TTest(1,0);
    }
}

Die erste Variante sieht man (zumindest geht es mir so) eher weniger...
 

Ähnliche Java Themen

Neue Themen


Oben