arraydaten zwischen classen übertragen

Status
Nicht offen für weitere Antworten.

DejaVu

Mitglied
Hallo Zusammen,

ich bin gerade dabei ein programm für die berufsschule zu erstellen. Die Aufgabe ist ein Netzwerkfähiges Schiffeversenken zu programmieren.

jetzt hat sich mir ein Problem in den weg gestellt, dass ich ohne hilfe leider nicht gelöst bekomme.

Ich möchte ein Array in einer Klasse füllen und dann sollen mir die daten in einer anderen zur verfügung stehen.

hatte jetzt mal versucht das mit get und set zu lösen, bin aber leider doch noch relativ unerfahren mit java, so dass das bisher nicht geklappt hat.

habe jetzt mal einen teil meines quellcodes vom rest extrahiert, so das man mein problem hoffentlich nachvollziehen kann:
Code:
// hier soll mein Array gefüllt werden.
package schiffeversenken;
public class Datensetzen {

	String array[][] = new String[10][10];

	public void setzen()

	{
		String arraylocal[][] = new String[10][10];

		arraylocal[0][0] = "ok";
		this.array[0][0] = arraylocal[0][0];
	}

	public void setArray(String[][] array) {
		this.array = array;
	}

	public String[][] getArray() {
		return array;
	}

}

Code:
// hier sollen die Daten zur Verfügung stehen.
package schiffeversenken;
public class Datenholen {

	public void holen() {
		Datensetzen datensetzen = new Datensetzen();
		String druck[][] = new String[10][10];
		druck = datensetzen.getArray();
		String s = druck[0][0];
		System.out.println("Testausdruck:  " + s);
	}
}


Code:
// Startklasse
package schiffeversenken;
public class Ausführen {

	public static void main(String[] args) {

		Datensetzen datensetzen = new Datensetzen();
		datensetzen.setzen();
		Datenholen datenholen = new Datenholen();
		datenholen.holen();

	}

}


Ich hoffe mir kann jemand weiterhelfen.

schon einmal viel Dank im vorraus.

Gruß Manuel[/code]
 
Code:
	public void setzen()

	{
		String arraylocal[][] = new String[10][10];

		arraylocal[0][0] = "ok";
		this.array[0][0] = arraylocal[0][0];
	}
wieso nicht einfach
Code:
	public void setzen()

	{
		this.array[0][0] = "ok";
	}
?
arraylocal wird doch überhaupt nicht genutzt

-----

Code:
		String druck[][] = new String[10][10];
		druck = datensetzen.getArray();
eine komische Krankheit, sieht man die letzten Monate meinem Gefühl nach viel öfter als früher,

wenn du einen Parkplatz für dein bestimmtes Auto X haben willst,
baust du dann einen Parkplatz mit einem niegelnagelneuen teuren Auto drauf,
wirfst dann sofort das niegelnagelneue teure Auto weg und stellst dein Auto X drauf?

bringt doch nix, da erst ein neues String[10][10] anzulegen,

Code:
		String druck[][] = null;
		druck = datensetzen.getArray();
geht genauso oder noch kürzer
Code:
		String druck[][] = datensetzen.getArray();

------

ansonsten sehe ich keine direkte Frage in deinem Posting, was geht nicht?

edit:
wahrscheinlich möchtest du in holen() einen Datensatz als Parameter übergeben statt einen neuen zu erzeugen,
dann übergib doch einen Parameter?
 
Hey also ich habe dir mal ein kleine Beispiel gemacht

Bin mir nicht sicher ob ich verstanden habe was du willst aber Vieleicht hilft dir dieser Code weiter:

Speicher.java

Code:
public class Speicher {
	
	private String[][] array = null;
	
	public Speicher() {
		array = new String[10][10];
		fillArray();
	}
	
	private void fillArray(){
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				array[i][j] = String.valueOf((int)(Math.random()*100));
			}
		}
	}

	public String[][] getArray() {
		return array;
	}

	public void setArray(String[][] array) {
		this.array = array;
	}	

}

Ausgabe.java
Code:
public class Ausgabe {

	private Speicher speicher;
	
	public Ausgabe(Speicher speicher) {
		this.speicher = speicher;
	}
	
	public void print(){
		String[][] array = speicher.getArray();
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				System.out.print(array[i][j] + "|");
			}
			System.out.println();
		}
		
	}

}

Start.java

Code:
public class Start {
	
	public static void main(String[] args) {
		Speicher speicher = new Speicher();
		
		Ausgabe ausgabe = new Ausgabe(speicher);
		ausgabe.print();
	}

}

Also was ich mach ist ganz einfach, also ich erzeuge eine 2D array und befühle sie zu gleich mit zufähliegen zahlen... Dieses geschiett in der Klasse Speicher.java ...Diese Obkejk erzeuge und Hole ich in der main methode in der Klasse Start.java.. Das gebe ich dan weiter an die Klasse Ausgeben.java.... wo ich sie dan dürchlaufe und ausgebe...

Also so benutze ich den getter, ist nur ein Beispile...

Das mit dem Netzwek verstehe ich nicht????
 
Ich glaube das Schiffeversenken soll dann von zwei Personen über das Netzwerk spielbar sein.
Das wird nicht einfach, wenn gerade erst die Basic's gelernt sind/werden.
 
für die kommunikation beim schiffe versenken braucht man doch keine arrays. man ruft dem anderen "B4" zu und er ruft "treffer", "versenkt" oder "wasser" zurück. die schnittstellen der klassen können auch problemlos genau so aussehen. und das gibt dann auch schon ne gute grundlage, für ne einfache netzwerkkommunikation.
 
Wenn in dem Array dann auch die Positionen der Schiffe verraten werden, finde ich das ziemlich misserablen Lösungsansatz.

Man sollte das lieber die Variante von didjitalist bevorzugen. Denn in Java ist relativ einfach den Code zu dekompilieren und die Schwärzungen sichtbar zu machen - optimal zum betrügen. Besser wäre es, das jeder Spieler so wenig weiß wie unbedingt notwendig, d.h. es werden nur Anfragen auf bestimmte Felder beantwortet.
Wenn das Spiel netzwerkfähig sein soll, solltest du dir Gedanken über das Protokoll machen. Wer spielt Server, wer Client? Wie finden die Rechner sich? Was tun, wenn einer nicht mehr reagiert?
 
Schon einmal vielen Dank für eure Anregungen.

ansonsten sehe ich keine direkte Frage in deinem Posting, was geht nicht?

führe ich oben genanntes Programm aus wird mir in der Konsole folgendes ausgegeben: Testausdruck: NULL
dabei ist mein Ziel das auszugeben: Testausdruck: ok


Ich glaube das Schiffeversenken soll dann von zwei Personen über das Netzwerk spielbar sein.
Das wird nicht einfach, wenn gerade erst die Basic's gelernt sind/werden.
ja genau so ist es, ich bin jetzt nicht weiter auf das eigentliche Spiel eingegangen, da der großteil so funktioniert wie ich mir das vorstelle.



Vielleicht könnt Ihr mir eher Helfen wenn Ihr meinen tatsächlichen Quellcode seht.

ich habe den socket so eingerichtet das man momentan gegen sich selber spielt, damit ihr nicht alles doppelt einbinden müsst.

Sämtliche .java Dateien habe ich unter folgendem Link als Zip Datei hochgeladen
http://www.fileuploadx.de/949320


so weit müsste das Spiel funktionieren:

Schiffe setzen.
Netzverbindung wird aufgebaut.
Schuss wird abgefragt.
Schüsse werden im Radar eingezeichnet.

Problem --> es wird nicht im Array "Meer" nachgeschaut ob der Schuss etwas "getroffen hat"

vielen Dank im Vorraus.

Gruß Manuel
 
wie gesagt, beim ursprünglichen Code

nicht
> public void holen() {
> Datensetzen datensetzen = new Datensetzen();

sondern
public void holen(Datensetzen datensetzen) {


und der Aufruf nicht
> datenholen.holen();
sondern
datenholen.holen(datensetzen);
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben