Rückgabe einer Klasse

denis7788

Bekanntes Mitglied
Hallo! Ich will einen String einer Klasse von meiner Testklasse ausgeben lassen. Wie stelle ich das an?.. habs mal so: (In der Klasse die Methode String toStrin(); den String str möchte ich haben)
Java:
import java.util.Arrays;
class Schonung {
	private Baum[][] baeume;
	private int laenge, breite;
	Schonung(int laenge, int breite) {Baum baeume[][] = new Baum[laenge][breite];
					  Baum stehende = new Baum();
					  int x=0, y=0;
						while(x < baeume.length) {
							while( y < baeume[x].length){
								baeume[x][y] = stehende;
								y++;}
						x++;}}
						
						
		boolean faelleBaum(int spalte, int zeile) {
					if(spalte < laenge && zeile < breite) return true;
					return false;
		}

		 int getLaenge() { return laenge;}
		 int getBreite() { return breite;}
		
		void schlageSchneise(int schneise, boolean laengs) {
					if(laengs == false){ 
						int x = 0;
						while(x < baeume.length) { baeume[x][schneise].faellen();
									   x++;}}
					else {  int x = 0;
						while(x < baeume[0].length) { baeume[schneise][x].faellen();
									   x++;}}
		}

		public String toString() {
			String str;
			str = Arrays.toString(baeume);
			return str;
		}

}
		}
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Testklasse>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<
class SchonungTest {
	public static void main(String[] args) {
	
		Schonung test1 = new Schonung(6,9);
		test1.faelleBaum(1,1);
		test1.faelleBaum(4,5);
		test1.faelleBaum(5,0);

		System.out.println(test1.toString());
 	}
}
 
Zuletzt bearbeitet von einem Moderator:

denis7788

Bekanntes Mitglied
hier ist noch die Klasse Baum falls es hilft...
Augabenstellung war ein Array zu erstellen das mit bäumen gefüllt ist, die man fällen kann. anschließend soll das neu entstandene array ausgegeben werden...



Java:
class Baum {
	private boolean gefaellt1;
	private String str;
	Baum(boolean gefaellt) { setGefaellt(gefaellt);}
	Baum() {  this(false);}
		
		boolean getGefaellt() {return gefaellt1;}
		void setGefaellt(boolean gefaellt) { gefaellt = false;
						gefaellt1 = gefaellt;}
		
		void faellen()    { gefaellt1 = true;}
		public String toString() { if(gefaellt1 == true)  {String str = "o";}
				    else
					if(gefaellt1 == false)  {String str = "x";}
				return str;
		}
 
S

SlaterB

Gast
> private Baum[][] baeume;
> private int laenge, breite;
> Schonung(int laenge, int breite) {Baum baeume[][] = new Baum[laenge][breite];

im Konstruktor erzeugst du eine neue lokale Variable baeume,
das gleichnamige Klassenattribut bleibt null,

schreibe
baeume = new Baum[laenge][breite];
statt
Baum baeume[][] = new Baum[laenge][breite];



-----
an dieser Gegenüberstellung sieht man auch sehr schön, dass die [][] nie an die Variable gehören, sondern an den Typ:
wenn überhaupt, dann
Baum[][] baeume = new Baum[laenge][breite];
 

Spi

Mitglied
Wenn ich mich nicht irre, liegt es daran dass "baeume" null ist.
Und das liegt an Zeile 5:
Java:
Baum baeume[][] = new Baum[laenge][breite];
Dadurch, dass du nochmal "Baum baeume[][]" schreibst, deffinierst du eine neue Variable, anstatt auf das Attribut zuzugreifen.
Was du schreiben müsstest wäre einfach:
Java:
baeume = new Baum[laenge][breite];

Edit: ups, SlaterB war schon schneller als ich
 

javimka

Top Contributor
Die Methode toString von Baum gibt immer null zurück. Das Problem ist, dass du in der if-Klausel schreibst [c]String str = "o"[/c] und dadurch ein neuer String erstellt wird, aber nicht auf das private str aus der Klasse gespeichert wird. später wird dann das str aus der Klasse zurückgegeben, welches immer noch null ist. So ist es richtig:
Java:
public String toString() {
  if (gefaellt1) {
    return "o";
  } else {
    return "x";
  }
}
 
S

SlaterB

Gast
Arrays.toString(baeume);
erstellt eine Ausgabe aus allen Elementen des Arrays,
was ist ein Element des Arrays? ein Baum[] (Element in Baum[][])
Baum[] toString() sieht nunmal so aus,
da hilft ne Schleife, Arrays.toString() geht nicht rekursiv alle Ebenen durch

Multi-dimensional arrays in Java
 

javimka

Top Contributor
Java:
String str = "";
for (int i=0;i<baeume.length;i++) {
  str = str+Arrays.toString(baeume[i])+"\n";
}
return str;
Beachte, dass bei jedem Schleifendurchgang ein komplett neuer String erstellt wird, und dies bei vielen Bäumen sehr speicher- und zeitaufwendig werden kann. Wenn es viele Bäume sind, wäre ein StringBuilder statt str besser.
 

denis7788

Bekanntes Mitglied
also hab jetzt die schleife gemacht.. gibt mir das array der richtigen größe raus.. jedoch mit default werten, also null null null.... müsst eja eigentlich mit 'o' für gefällt und 'x' für einen stehenden baum gefüllt sein. Ich weiß nicht wie ich die toString() methode in der Klasse Baum in Verbindung bringen soll mit meinem array in der Klasse Schonung. Ich könnte ja auch eine Schleife dafür machen aber ich glaube das ist nicht Sinn der Aufgabe..
 

denis7788

Bekanntes Mitglied
so ich habe jetzt noch in der Klasse Schonung den Kontruktor verändert, sodass sich auch wirklich das ganze feld füllt, die methode boolean faelleBaum() ergänzt und die erwähnte toString methode geändert. aber es werden keine Bäume gefällt...

Java:
import java.util.Arrays;
class Schonung {
	private Baum[][] baeume;
	private int laenge, breite;
	Schonung(int laenge, int breite) {baeume = new Baum[laenge][breite];
					  Baum stehende = new Baum();
					  
					  int x=0;
						while(x < baeume.length) {
							int y = 0;
							while( y < baeume[x].length){
								baeume[x][y] = stehende;
								y++;}
						x++;}}
						
						
		boolean faelleBaum(int spalte, int zeile) {
					if(spalte < laenge && zeile < breite) {baeume[zeile][spalte].faellen(); return true;}
					else {return false;}
		}

		 int getLaenge() { return laenge;}
		 int getBreite() { return breite;}
		
		void schlageSchneise(int schneise, boolean laengs) {
					if(laengs == false){ 
						int x = 0;
						while(x < baeume.length) { baeume[x][schneise].faellen();
									   x++;}}
					else {  int x = 0;
						while(x < baeume[0].length) { baeume[schneise][x].faellen();
									
									   x++;}}
		}
		

		public String toString() {
			String str = "";
			for (int i=0;i<baeume.length;i++) {
  			str = str+Arrays.toString(baeume[i])+"\n";}


			return str;
		}

}


<<<<<<<<<<<<<<<<<<<<<<<<

Java:
class Baum {
	private boolean gefaellt1;
	private String str;
	Baum(boolean gefaellt) { setGefaellt(gefaellt);}
	Baum() {  this(false);}
		
		boolean getGefaellt() {return gefaellt1;}
		void setGefaellt(boolean gefaellt) { gefaellt = false;
						gefaellt1 = gefaellt;}
		
		void faellen()    { gefaellt1 = true;}
		public String toString() {
			if(gefaellt1) {
			    return "o";
		      } else {
			return "x";
		      }
		}
		 		

}

<<<<<<<<<<<<<<
Java:
import java.util.Arrays;
class SchonungTest {
	public static void main(String[] args) {
	
		Schonung test1 = new Schonung(6,9);
		test1.faelleBaum(1,1);
		test1.faelleBaum(4,5);
		test1.faelleBaum(5,0);
		
		System.out.println(test1);
 	}
}
 
S

SlaterB

Gast
in die Methode faellen() schreibe
System.out.println("plumps");

du wirst keine Ausgabe sehen,
und jetzt versuche bitte selber zu debuggen, woran das liegt, welche Methoden sind daran beteiligt, was wird doch vielleicht nur bedingt ausgeführt,
wie sehen die Bedinungen aus, was wird verglichen usw...

edit:
und nicht nur glauben 'das und das sollte doch funktionieren'
sondern mit System.out.println oder einem Debugger haargenau nachschauen, welche Variable zu welchem Zeitpunkt welchen Wert enthält, wann gesetzt wird usw.
 
Zuletzt bearbeitet von einem Moderator:

denis7788

Bekanntes Mitglied
Die methode faelen ist so vorgegeben(also void). aber ich hab mal änderungen an anderen stellen unternommen. habe die schlageschneise methode umgechrieben und die klasse baum(nur damit es übersichtlicher ist). wie bekomme ich es denn jetzt hin den konstruktor Baum() aufzurufen und nicht den kontruktor Baum(boolean gefaellt)? habs schon versucht mit new Baum(false), new Baum (true) und new Baum()?!?
 
S

SlaterB

Gast
> new Baum(false), new Baum (true) und new Baum()
kannst du alles aufrufen oder was ist die Frage dazu?

gerade fällt mir auch auf, dass du zumindest im obigen Code Gestern, 18:58 nur einem Baum erstellst und den an alle Array-Positionen schreibst,
das ist ja nicht so gut, lieber überall einen eigenen neuen Baum

----------

hat das noch mit dem vorherigen Problem zu tun? der Punkt den ich da meinte war
> boolean faelleBaum(int spalte, int zeile) {
> if(spalte < laenge && zeile < breite)
die Klassenattribute laenge und breite sind nämlich 0..
 

denis7788

Bekanntes Mitglied
also ich wollte alle felder mit einem stehenden baum füllen. wenn ich einen baum fälle setze ich doch ein neues baum objekt in das feld. dann ist es doch egal ob zuvor überall der gleiche drin war? oder habe ich da einen denkfehler?... zu meiner frage: was ich machen wollte ist, in der methode schlageScheneise die jeweiligen felder baeume[schneise][x] jeweils mit einem gefällten baum zu füllen, also die zuordnung
baeume[schneise][x] = Baum(); meine frage war jetzt wie ich einen unterschied im Aufruf der konstruktoren in Klasse Baum mache. ich habe ja zwei verschiedene, einen der einen gefällten baum repräsentiert und einen, der einen stehenden repräsentiert.
 
S

SlaterB

Gast
> wenn ich einen baum fälle setze ich doch ein neues baum objekt in das feld.

würdest du das nur machen,
was steht stattdessen an Code faelleBaum(int spalte, int zeile) (der wegen laenge/ breite 0 eh nie ausgeführt wird)?:
> if(spalte < laenge && zeile < breite) {baeume[zeile][spalte].faellen();
hier wird das vorhandene Baum-Objekt geändert, also alle Bäume im Array, da ja alle dieselben sind

-----------

> baeume[schneise][x] = Baum(); meine frage war jetzt wie ich einen unterschied im Aufruf der konstruktoren in Klasse Baum mache

schreibe entweder
baeume[schneise][x] = Baum();
oder
baeume[schneise][x] = Baum(true);
oder
baeume[schneise][x] = Baum(false);

alle drei Möglichkeiten gehen, mit unterschiedlichen Auswirkungen
 

denis7788

Bekanntes Mitglied
... also jetzt habe ich laenge und breite auf eine größe gesetzt;
...dann fülle ich jedes feld mit einem neuen objekt;
und in der schlageSchneise methode setzte ich wiederum ein neues objekt rein für gefällten baum.
-ich hab jetzt mal rausgefunden, das es davon abhängt welchen wert die instanzvariable gefaellt1 in klasse baum hat ob ich nun alle bäume gefällt habe oder ob alle noch stehen.
-ist es richtig, das jetzt die methoden faelleBaum und schlageSchneise nun nur das jeweilige objekt ersetzen und nicht alle?(ich habe es auch versucht mit: baeume[zeile][spalte].faellen() ... )
- und hat die variable baeume in der for schleife in methode tring toString() in klasse Schonung keinen Bezug zu baeume in faelleBaum() und schlageSchneise()?


Java:
import java.util.Arrays;
class Schonung {
	private Baum[][] baeume;
	private int laenge1, breite1;
	Schonung(int laenge, int breite) {int laenge1 = laenge; int breite1 = breite;
					  baeume = new Baum[laenge][breite];
					  
					  
					  int x=0;
						while(x < baeume.length) {
							int y = 0;
							while( y < baeume[x].length){
								baeume[x][y] = new Baum(true);
								y++;}
						x++;}}
						
						
		boolean faelleBaum(int spalte, int zeile) {
					if(spalte < laenge1 && zeile < breite1) {baeume[zeile][spalte]= new Baum(true); return true;}
					else {return false;}
		}

		
		void schlageSchneise(int schneise, boolean laengs) {
					if(laengs == false){ 
						int x = 0;
						while(x < baeume.length) { 
									   baeume[x][schneise] =new Baum(true);
									   x++;}}
					else {  int x = 0;
						while(x < baeume[0].length) { 
									    baeume[schneise][x] =new Baum(true);
									   x++;}}
		}
		

		public String toString() {
			String str = "";
			for (int i=0;i<baeume.length;i++) {
  			str = str+Arrays.toString(baeume[i])+"\n";}


			return str;
		}

}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> ... also jetzt habe ich laenge und breite auf eine größe gesetzt;

nein, du definierst neue lokale gleichnamige Variablen, die Klassenattribute bleiben bei 0,
siehe die Antwort Gestern, 17:31 und die beidenen folgenden,

> dann fülle ich jedes feld mit einem neuen objekt;

mit baeume[x][y] = new Baum(true);
aber das sind dann ja schon gefällte Bäume?!

> -ich hab jetzt mal rausgefunden, das es davon abhängt welchen wert die instanzvariable gefaellt1 in klasse baum hat ob ich nun alle bäume gefällt habe oder ob alle noch stehen.

na sicher, damit wird bestimmt was in dem einem Baum los ist, wo sonst,
aber auf andere Bäume sollte das hoffentlich keine Auswirkungen haben, es sei denn du betrachtest wiederum x mal denselben Baum als 'alle'

> -ist es richtig, das jetzt die methoden faelleBaum und schlageSchneise nun nur das jeweilige objekt ersetzen und nicht alle?(ich habe es auch versucht mit: baeume[zeile][spalte].faellen() ... )

Ersetzen funktioniert hoffentlich, falls nicht läßt sich das durch Ausprobieren herausfinden
faellen() müsste auch gehen wenn nicht sowieso schon alle gefällt,

> - und hat die variable baeume in der for schleife in methode tring toString() in klasse Schonung keinen Bezug zu baeume in faelleBaum() und schlageSchneise()?

ich hoffe doch..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
karlmasutra Klassen Rückgabe eines Wertes aus einer anderen Klasse Java Basics - Anfänger-Themen 3
L Probleme bei Rückgabe eines Arrays in einer Methode Java Basics - Anfänger-Themen 47
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
llabusch Methoden Rückgabe einer Methode verwerden Java Basics - Anfänger-Themen 1
G Rückgabe einer Kopie bzw. Referenz Java Basics - Anfänger-Themen 22
G Rückgabe einer Methoden bei Schließen des Fensters Java Basics - Anfänger-Themen 3
F Rückgabe eines Array´s aus einer Methode Java Basics - Anfänger-Themen 3
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
Z Rückgabe eines Values in umgekehrte richtung Java Basics - Anfänger-Themen 5
M Rückgabe eines Arrays Java Basics - Anfänger-Themen 10
R Methode Rückgabe Java Basics - Anfänger-Themen 10
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
J Rückgabe-Problem Java Basics - Anfänger-Themen 10
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
J Funktionen auf der Rückgabe eines Stacks (pop) Java Basics - Anfänger-Themen 6
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
D Methoden ArrayList Rückgabe bringt komische Werte Java Basics - Anfänger-Themen 12
M Übergabe / Rückgabe Java Basics - Anfänger-Themen 6
A Rückgabe in for-Schleife Java Basics - Anfänger-Themen 2
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
G Methoden mehrdimonsionale Arrays als Rückgabe Java Basics - Anfänger-Themen 2
S Methode rückgabe wiederverwenden Java Basics - Anfänger-Themen 4
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
R public static void Rückgabe Java Basics - Anfänger-Themen 5
H Array wird verändert ohne Rückgabe? Java Basics - Anfänger-Themen 7
S Rückgabe von einem Array Java Basics - Anfänger-Themen 7
S Problem mit Rückgabe Wert von Methoden Java Basics - Anfänger-Themen 5
M Serialize - Fehler bei Rückgabe von Objekt Java Basics - Anfänger-Themen 5
R CMD Rückgabe durchlesen Java Basics - Anfänger-Themen 14
W Rückgabe Methode mit Feld Java Basics - Anfänger-Themen 4
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
N Rückgabe der Werte funktioniert nicht Java Basics - Anfänger-Themen 9
F Problem bei Rückgabe von StringBuffer aus Methode Java Basics - Anfänger-Themen 6
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7
K Problem mit der Rückgabe Java Basics - Anfänger-Themen 3
R Rückgabe Array Java Basics - Anfänger-Themen 22
G Klasse überschreiben wenn Rückgabe über Methode Java Basics - Anfänger-Themen 6
M Methode mit Rückgabe Java Basics - Anfänger-Themen 2
D Maximum Subarray Problem; Problem mit der Rückgabe Java Basics - Anfänger-Themen 10
N Methoden und deren Rückgabe Java Basics - Anfänger-Themen 4
H TreeMap Rückgabe - Compiler-Warnings Java Basics - Anfänger-Themen 9
M Rückgabe bei Exception Java Basics - Anfänger-Themen 4
H Rekursion und Rückgabe Java Basics - Anfänger-Themen 11
K Rückgabe aus Formular Java Basics - Anfänger-Themen 3
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
B "vollständige" Resultat Rückgabe Java Basics - Anfänger-Themen 8
G Problem mit der Rückgabe von einem Array Java Basics - Anfänger-Themen 3
A Beschreibung von Code und Rückgabe von Anzahl in ArrayList Java Basics - Anfänger-Themen 5
C Parameter rückgabe nach Prüfung an Klasse/Methode Java Basics - Anfänger-Themen 2
R Rückgabe vom ActionListener Java Basics - Anfänger-Themen 12
B JavaFilter true rückgabe Java Basics - Anfänger-Themen 23
S Rückgabe eines eingelesenen 2D Arrays aus Klasse heraus Java Basics - Anfänger-Themen 3
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
zilti PHP-Script aufrufen und Rückgabe lesen Java Basics - Anfänger-Themen 2
G Array Rückgabe aus Programm Java Basics - Anfänger-Themen 6
0 Probleme bei Threads mit Rückgabe. Java Basics - Anfänger-Themen 6
C Rückgabe bei methoden Java Basics - Anfänger-Themen 2
S Probleme mit InputStream- Rückgabe Java Basics - Anfänger-Themen 4
G Warum ist die Rückgabe kein Integer? Java Basics - Anfänger-Themen 5
G Rückgabe Java Basics - Anfänger-Themen 6
G Rückgabe mehrdimensionales Array Java Basics - Anfänger-Themen 3
M Rückgabe funktioniert nicht! Java Basics - Anfänger-Themen 4
M Rückgabe oder Parameter? Java Basics - Anfänger-Themen 5
H Konstruktor mit Rückgabe Java Basics - Anfänger-Themen 13
L Rückgabe Java Basics - Anfänger-Themen 4
D Rückgabe von Arrays Java Basics - Anfänger-Themen 6
F http post einer Webseite nachahmen Java Basics - Anfänger-Themen 3
C Abbruch einer Schleife mit break, meine Übung funktioniert nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable bei aktivieren einer Zelle soll Text selektiert werden. Java Basics - Anfänger-Themen 24
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben