Array Objekte erstellen

Jeyjo

Mitglied
Guten Abend, hoffe mir kann schnell jemand weiterhelfen, sollte ziemlich einfach sein bin aber noch ein Laie auf dem Gebiet, habe vor einigen Wochen erst meine Ausbildung begonnen..

Folgendes Problem:

Ich erstelle ein Kosolenprogramm welches ein Menü hat durch dass ich mit mit Eingaben von zB 1 - 4 navigiere:

Java:
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Menue 
{
 public static void main(String [] args)
 {
 
 Lok[] lokschuppen;
 lokschuppen = new Lok[10];
 
 boolean weiter = true;
 InputStreamReader istream = new InputStreamReader(System.in);
 BufferedReader br = new BufferedReader(istream);

try{
    do{
        System.out.println("(1) Lokomotive erstellen");
        System.out.println("(2) Lokomotive steuern");
        System.out.println("(3) Lokomotive löschen");
        System.out.println("(Q) Programm beenden");
        System.out.println("Bitte Auswahl eingeben: ");
        String line = br.readLine();
        
        if ("Q".equals(line)){
            weiter = false;
        }
        
        if ("1".equals(line)){
        	
        	
        	
        	boolean weiter2 = true;
        	
        	try{
        	    do{
        	       
        	       System.out.println("(1)  Lok 1 erstellen");
        		   System.out.println("(2)  Lok 2 erstellen");
        		   System.out.println("(3)  Lok 3 erstellen");
        		   System.out.println("(4)  Lok 4 erstellen");
        		   System.out.println("(5)  Lok 5 erstellen");
        		   System.out.println("(6)  Lok 6 erstellen");
        		   System.out.println("(7)  Lok 7 erstellen");
        		   System.out.println("(8)  Lok 8 erstellen");
        		   System.out.println("(9)  Lok 9 erstellen");
        		   System.out.println("(10) Lok 10 erstellen");
        		   System.out.println("(Z)  Zurück");
        	       System.out.println("Bitte Auswahl eingeben: ");

        	       String line2;
        	       line2 = br.readLine();
        	       
        	       int position = Integer.parseInt(line2) - 1;
        	       
        	       lokschuppen[position].erzeugeLok();
        	      
        	       
        	       
       			   
       			   if (line2.equals("Z")){
        	    
        	    	weiter2 = false;
       			 
       			 	}
       			 	
       			 	
       			  }while(weiter2);
       		  }catch(Exception e){
   					 e.printStackTrace();
        	         }
		    
		    }
		    
		    if ("2".equals(line)){
		    
		    boolean weiter3 = true;
		    
		    try{
        	    do{
        	       
        	       System.out.println("(1)   Lok 1");
        		   System.out.println("(2)   Lok 2");
        		   System.out.println("(3)   Lok 3");
        		   System.out.println("(4)   Lok 4");
        		   System.out.println("(5)   Lok 5");
        		   System.out.println("(6)   Lok 6");
        		   System.out.println("(7)   Lok 7");
        		   System.out.println("(8)   Lok 8");
        		   System.out.println("(9)   Lok 9");
        		   System.out.println("(10)  Lok 10");
        		   System.out.println("(Z)  Zurück");
        	       System.out.println("Bitte Auswahl eingeben: ");
        	       String line3 = br.readLine();
        	       
        	       if ("1".equals(line3)){
        	    
        	    	lokschuppen[0].getTyp();
        	    	lokschuppen[0].getNummer();
        	    	lokschuppen[0].getAbmessungen();
        	    
        	    	 
        	    	 }
        	       
        	       if ("Z".equals(line3)){
        	    
        	    	weiter3 = false;
       			 
       			 	}
       			 	
       			 	
       			  }while(weiter3);
       		  }catch(Exception e){
   					 e.printStackTrace();
        	         }
		    
		    }
        	    	
		    
        
    }while(weiter);
}catch(Exception e){
   	e.printStackTrace();
}
}
}

Menüpunkt 1 soll ein Array erzeugen (Zehn Plätze), dafür habe ich eine eigene Klasse angelegt:

Um möglichst wenig Fragen zu verursachen Poste ich den vollständigen Code! 😉

Java:
public class Lokschuppen {

 
 
 public void erzeugeLok() {
	
	
    public lokschuppen[position] = new Lok();    	    
        	    
    lokschuppen[position].setTyp();
  	lokschuppen[position].setBaureihe();
    lokschuppen[position].setNummer();
    lokschuppen[position].setLaenge();
    lokschuppen[position].setBreite();
    lokschuppen[position].setHoehe();
    lokschuppen[position].setLeistung();

 
 }
}

Zu guter letzt habe ich noch eine Lok-Klasse für die Objekte die im Array festgehalten werden, damit treten aber keine Probleme auf deshalb brauche ich die nicht zwingend zu posten. Wer sie zur Übersicht halber braucht, sagt bitte bescheid.

In Zeile 56 ist mein Fehler, da ich nicht auf die Methode der Array Klasse Lokschuppen zugreifen kann. Da mir die Ideen ausgegangen sind bitte ich mal um ein paar Vorschläge oder Lösungen. Vielen Dank schonmal!

Jeyjo
 
Folgende Fehlermeldung:


Code:
Menue.java:56: cannot find symbol
symbol  : method erzeugeLok()
location: class Lok
        	       lokschuppen[position].erzeugeLok();
        	                            ^
1 error
 
Mein Plan ist über die Klasse Lokschuppen die Methode - erzeugeLok(); - auszuführen die dann eine Lok erstellt
 
Zuletzt bearbeitet:
Na da stecken aber so einige Anfänger-Fehler drin.

Zeile 9-10 : das kann man in einer Zeile schreiben, was man normalerweise auch macht

Zeile 25-27 : ist zwar richtig ein Flag zu setzen damit die Schleife "sauber" beendet, aber hier würde ein break; (oder return wenn es eine eigene Methode wäre) völlig reichen, auch wenn es nicht der beste Stil wäre

Zeile 56 : ist so überhaupt nicht möglich und würde zur Runtime grundsätzlich in einer NullPointer enden, denn "lockschuppen[x]" ist zu diesem Zeitpunkt immer noch "NULL"
außerdem gehört die methode "erzeugeLock()" zur Klasse "Lokschuppen" und nicht zu "Lok"

Und die Klasse "Lokschuppen" lässt sich so gar nicht compilen:

Zeile 8 : gleich 2 Fehler : 1) man kann innerhalb einer Methode keine scope-modifier nutzen > "public" muss weg, und 2) der Typ fehlt

Und "position" gibt es in der Klasse überhaupt garnicht.

Ich empfehle dir mal "Java ist auch eine Insel" durch zu arbeiten, denn dir fehlen die einfachsten Grundlagen.

Zu deiner Frage : "Was muss ich ändern?" > so gut wie fast alles. Außerdem kann man deine vermutlich geplanten IF's anders lösen.
 
Berechtigte Kritik, aber ich bin erst bei Kapitel 4 von Java von Kopf bis Fuß..

Kanns einfach noch nicht besser :bahnhof:

Zeile 8 : gleich 2 Fehler : 1) man kann innerhalb einer Methode keine scope-modifier nutzen > "public" muss weg, und 2) der Typ fehlt

welcher Typ?
 
Ich seh schon Dein Verständnisproblem;

Code:
Lok[] lokschuppen = new Lok[10];

Damit erzeugst Du kein Array, was 10x eine Lok drinhat sondern nur ein Array, was Platz für 10 Loks bietet (es wird also auch nicht der Konstruktor von Lok aufgerufen).

Daher geht das hier...
Code:
lokschuppen[position].erzeugeLok();
... auch in die Hose, weil lokschuppen[x] an dieser Stelle noch NULL ist.

Du müsstest also in etwa sowas bauen:

Code:
Lok[] lokschuppen = new Lok[10];
for (int i=0; i< lokschuppen.length; i++) {
  lokschuppen[i]=new Lok();
}

Deine Klasse "Lokschuppen" hat da nix zu suchen, die müsste "Lok" heissen (und das "public lokschuppen[position] = new Lok();" darin ist dann auch hinfällig).

Bernd
 

Zurück
Oben