Arraywritefunktion

janb14

Mitglied
Hallo liebe Formumsbesucher.
Ich habe ein Problem bezüglich eines JavaProgramms.Ich versuche derzeit in einer Nebenklasse eine Art Array Speicher anzulegen.Nun gibt es folgendes Problem:Wie kann ich den Arraynamen als Operator übergeben?Hier der Versuch:
Java:
        String[] Tor_links = new String[3];
	String[] Verteidiger_1_links = new String[3];
	String[] Verteidiger_2_links = new String[3];
	String[] Verteidiger_3_links = new String[3];
	String[] Stürmer_1_links = new String[3];
	String[] Stürmer_2_links = new String[3];
	
	
	String[] Tor_rechts = new String[3];
	String[] Verteidiger_1_rechts = new String[3];
	String[] Verteidiger_2_rechts = new String[3];
	String[] Verteidiger_3_rechts = new String[3];
	String[] Stürmer_1_rechts = new String[3];
	String[] Stürmer_2_rechts = new String[3];
	
	
	public void Arraywrite(String holder,int arraynum,String info){
		holder[arraynum] = info;
		
	}
	
	public String Arrayread(String holder,int arraynum){
		return holder[arraynum];
		
	}
Ich hoffe ihr habt irgendwelche Vorschläge.Der Compiler will das iwi nicht schlucken.
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Der Typ von holder sollte String[] sein und nicht String.
Also
Java:
public String Arrayread(String[] holder,int arraynum)

Aber wenn du in der Lage sein willst das Array über den Namen auszuwählen, bietet sich eine HashMap an.
Java:
HashMap<String, String[]> map = new HashMap<>();
map.put("Verteidiger_1_links", new String[3]);

public String Arrayread(String holder,int arraynum) {
    return map.get(holder)[arraynum];
}
 
Zuletzt bearbeitet:

janb14

Mitglied
Hmm vielen Dank für die Antwort nur funktionieren beide Varianten bei mir nicht so recht.
Zur ersten:wie greife ich denn dann auf die Funktion zu ?Mein Versuch:
Java:
Fussballspiel_Calculation.Arraywrite(Tor_links[],1,"test");
=>bekomme den Fehler das Tor_links nicht zu einem Typen aufgelöst werden kann . :(

Zur zweiten : Der schluckt bei mir das ablegen in die Hashmap nicht selbst wenn ich den Befehl von hier kopiere sagt er :Syntax error on tokens 1.delet the tokens 2.misplaced constructer

Ideen ???
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Hier ist mal eine Lösung mit einer HashMap.
Java:
public class Mannschaft {
    private HashMap<String, String[]> map = new HashMap<>();
    
    public Mannschaft() {
        map.put("Tor", new String[3]);
        map.put("Verteidiger", new String[3]);
        map.put("Stürmer", new String[3]);
    }
    
    public void arrayWrite(String holder,int arraynum, String info) {
        map.get(holder)[arraynum] = info;
    }
    public String arrayRead(String holder,int arraynum) {
        return map.get(holder)[arraynum];
    }
}

Aber da ich nicht genau weiss was du vorhast, kann ich nicht beurteilen ob das eine gute Lösung ist.
 

njans

Top Contributor
Java:
Fussballspiel_Calculation.Arraywrite(Tor_links[],1,"test");
Das ist ja auch kein gültiger Aufruf. Was soll denn "Tor_links[]" darstellen?
Tor_links ist eine Variable vom Typ String[]. Klammern haben hinter dem Variablennamen hier keine Bedeutung, daher schmeißt dir der Compiler hier einen Syntax Fehler. entweder soll da ein neues String[] erzeugt werde:
Java:
Fussballspiel_Calculation.Arraywrite(new String[1],1,"test");
oder du willst die Variable übergeben:
Java:
Fussballspiel_Calculation.Arraywrite(Tor_links,1,"test");
 

janb14

Mitglied
zu DrZoidberg Ansatz :
ich habe mir nun nach deinem Vorschlag eine eigenen Klasse Mannschaft erstellt.Meine Absicht hinter alledem ist das ich in einem Auswahlmenü eine kleine Manschaft zusammenstellen will und dsa auf diese hier hinterlegten Werte von überall und zu jeder Zeit in anderen Klassen darauf zugegriffen werden muss.
Nun hier der Ansatz:
Java:
import java.util.HashMap;

    public class Mannschaft {
        private static HashMap<String, String[]> map = new HashMap<>();
       
        public Mannschaft() {
            map.put("Tor_links",  new String[3]);
            map.put("Verteidiger_1_links",  new String[3]);
            map.put("Verteidiger_2_links",  new String[3]);
            map.put("Verteidiger_3_links",  new String[3]);
            map.put("Stürmer_1_links",  new String[3]);
            map.put("Stürmer_2_links",  new String[3]);
            
            map.put("Tor_rechts",  new String[3]);
            map.put("Verteidiger_1_rechts",  new String[3]);
            map.put("Verteidiger_2_rechts",  new String[3]);
            map.put("Verteidiger_3_rechts",  new String[3]);
            map.put("Stürmer_1_rechts",  new String[3]);
            map.put("Stürmer_2_rechts",  new String[3]);
        	
        }
       
        public static void arrayWrite(String holder,int arraynum, String info) {
            map.get(holder)[arraynum] = info;
        }
        public static String arrayRead(String holder,int arraynum) {
            return map.get(holder)[arraynum];
        }
    }
Nun erneut ein Problem:
Wenn ich nun in ein Array schreiben will wollte ich die mit
Java:
Mannschaft.arrayWrite("Tor_rechts",0,"test");
tun, doch dabei bekomme ich einen Fehler:
Exception in thread "AWT-EventQueue-0"java.lang.NullPointerException
at Mannschaft.arrayWrite(Mannschaft.java:24)
Ideen ?
 
Zuletzt bearbeitet:

njans

Top Contributor
Natürlich bekommst du eine NPE geworfen.
Deine Map ist statisch und wird immer wieder dann überschrieben, wenn man ein Objekt von Mannschaft instanziiert.
Hier sollte man das Konzept von Objektorientierter Programmierung verstanden haben und das static aus der Deklaration deiner Map und deiner beiden Methoden arrayWrite und arrayRead entfernen.
 

janb14

Mitglied
Danke für die schnelle Antwort .Whoops war mein Fehler natürlich muss das static raus und dann nen Manschaftsobjekt erzeugt werden:) Danke für die Hilfe und damit schließe ich dann mal die Topic.
 

janb14

Mitglied
Häää lagsam steig ich da garnich mehr durch !!! So alles hat prima funktioniert ...bis ich versucht habe eine sich wiederhohlende Abfolge von Befehlen in eine eigene Klasse zu verpacken.Hier die neue Klasse:
Java:
public class Playerselector {
	private JFrame Playerselect = new JFrame("Select a player!");
	
	
	
	protected  ImageIcon createImageIcon(String path) {
	     java.net.URL imgURL = getClass().getResource(path);
	     if (imgURL != null) {
	         return new ImageIcon(imgURL);
	     } else {
	         System.err.println("Couldn't find file: " + path);
	         return null;}
	     }

	public void creatPlayerselector(final String button_name,final Mannschaft mansch){
         [...]
        mansch.arrayWrite(button_name,0,"test");
        }

und ich erstelle in meiner Hauptklasse ein Manschaftsobjekt :
Java:
Mannschaft Mansch1 = new Mannschaft();
welches ich auch munter übergebe nun bekomme ich aber wieder die Nullpointerexeption ,wenn ich die beschreiben will:
Java:
selector.creatPlayerselector("Tor_Links",Mansch1);
:( Was nun?


Update: Ok hat sich erledigt :D war mein Fehler ich hatte den String für den Arraynamen falsch geschrieben :lol:
 
Zuletzt bearbeitet:

Oben