ArrayList in andere Klasse übernhemen

Diskutiere ArrayList in andere Klasse übernhemen im Java Basics - Anfänger-Themen Bereich.
S

Starlordinator

Guten Tag,
nicht ganz sicher, ob das noch zu Anfänger gehört. Folgendes Problem:
Ich habe in der Klasse Spielfeld mit der Methode hindernislisteErzeugen() eine Liste von Rechtecken erzeugt und diese mit dem return Befehl zurückgegeben.
Java:
import java.io.*;
import java.util.*;
import java.awt.Color;
import java.util.Random;

public class Spielfeld
{
    private int breite = 1000;      //Länge, Breite des Spielfeldes
    private int laenge = 1000;
    private Punkt[] punkte;         //Array der Klasse "Punkt"; Array = endliche Menge völlig gleichartiger Variablen; in diesem Fall Punkte
    private int unten = 1;      //Variable zum Tauschen der Array-Variablen
    private static Random zufallsgenerator;
    ArrayList<Rechteck> hindernisse = new ArrayList<Rechteck>();         //Array Liste (ähnlich Array nur mit "unbergrenzter" Länge) mit Namen "hindernisse" und vom Typ "Rechteck"


    public Spielfeld()                                                                      //bis jetzt leerer Konstruktor
        {
            Roboter robert = new Roboter();
        }

    public Punkt[] punktEingeben()                                                                 //Methode zur Eingabe/Initialisierung von beliebig vielen Punkten
        {
            System.out.println("Anzahl der gewünschten Punkte eingeben: ");                     //Konsolenaufforderung
            Scanner sc = new Scanner(System.in);                                            
            int anzahl = sc.nextInt();                                                          // Scanner mit Variablen "anzahl" als Anzahl der Punkte
            System.out.println("Geben Sie die Koordinaten der " + anzahl + " Punkte ein.");     //Konsolenausgabe mit "anzahl" zur Kontrolle der Anzahl                                                                  
            punkte = new Punkt[anzahl + 1];                                                        //Array "punkte" enthält anzahl+1 Variablen(Punkte); "anzahl" vom Benutzer eingegbene + Startpunkt (0/0)
            int b = 1;                                                                          //Initialisierung der Variable "b" zur besseren Ausgabe auf der Konsole (siehe Z.63)
            int a = anzahl;                                                                     //Initialisierung der Laufvariable "a"
                while( a > 0 )                                                                 //while-Schleife mit "a" als Laufvariable
                {
            
                    Scanner sc1 = new Scanner(System.in);                                           //Scanner für Konsoleneingabe für die x-Variable des a-ten Punktes
                    int x = sc1.nextInt();
            
                    while (x >= 1000)                                                               //Schleife, wenn x größer als 1000; kleiner als 0
                        {
                            System.out.println("x muss im Spielfeld (zwischen 0 und 1000) liegen!");
                            Scanner sc3 = new Scanner(System.in);
                            x = sc3.nextInt();                
                        }
                    
                    while (x <= 0)                                                               //Schleife, wenn x größer als 1000; kleiner als 0
                    {
                        System.out.println("x muss im Spielfeld (zwischen 0 und 1000) liegen!");
                        Scanner sc3 = new Scanner(System.in);
                        x = sc3.nextInt();                
                    }        
            
                    Scanner sc2 = new Scanner(System.in);                                           //Scanner für Konsoleneingabe für die y-Variable des a-ten Punktes
                    int y = sc2.nextInt();
                    
                    while (y >= 1000)                                                               //Schleife, wenn y größer als 1000; kleiner als 0
                    {
                        System.out.println("y muss im Spielfeld (zwischen 0 und 1000) liegen!");
                        Scanner sc3 = new Scanner(System.in);
                        y = sc3.nextInt();                
                    }
                    
                    while (y <= 0)                                                               //Schleife, wenn y größer als 1000; kleiner als 0
                    {
                        System.out.println("y muss im Spielfeld (zwischen 0 und 1000) liegen!");
                        Scanner sc3 = new Scanner(System.in);
                        y = sc3.nextInt();                
                    }   
            
                    punkte[a] = new Punkt();                                                      //die eben eingegebenen x, y -Werte als Koordinaten des Punktes setzen
                    punkte[a].setBoth(x, y);
                    System.out.println("Koordinaten des " + b + ". Punktes: (" + x + "/" + y + ")");
                    a--;                                                                       //Laufvariable a um 1 verkleinern
                    b++;                                                                            //Laufvariable b um 1 vergrößern
                }
            punkte[0] = new Punkt(0 , 0);                                                      //den ersten bzw. nullten Punkt auf (0/0) setzten; Startpunkt des Roboters
            return punkte;                                                                     //das Array "poi" ausgeben
        }
        
    public void poiSortieren(Punkt[] poi)                                           //Methode zum Sortieren der vorher eingegebenen Punkte nach Abstand;
        {                                                                               //Initialisierung der Variablen
            int x;                                                                      //x = x-koordinate des Bezugspunktes
            int y;                                                                      //y = y-Koordinate des Bezugspunktes
            double d1;                                                                  //Abstand zwischen dem Bezugspunkt und dem ersten Punkt
            int anzahl = poi.length;                                                    //anzahl wird auf Länge des eingegebenen Arrays gesetzt
            int speicher = 0;                                                           //Initialisierung des Speichers zur speicherung des bisher kürzeseten Abstandes
            int unten = 1;                                                              //Variable zum Tauschen der Array-Variablen
            
            for(int bezugspunkt = 0; bezugspunkt < anzahl - 1; bezugspunkt++)               //for-Methode zur Extraktion der x, y -Werte des Bezugspunktes
            {
                    double kurz = 1500;
                    x = poi[bezugspunkt].getX();
                    y = poi[bezugspunkt].getY();
                for(int abstand = bezugspunkt + 1; abstand < anzahl; abstand++)                   //for-Methode zum Bestimmen der Abstände
                {
                    d1 = poi[abstand].gibAbstand(x, y);
                    if(d1 < kurz)                                                     //if-Methode zum Vgl. von kurz mit d1
                    {
                    kurz = d1;                                                      //wenn d1 kürzer ist als der bisher kürzeste Abstand wird d1 zu kurz
                    speicher = abstand;                                             //der Array-Index des jetzt kürzesten Abstandes wird in "speicher" gemerkt
                    }
                }
                    System.out.print("Koordinaten des " + unten + ". Punktes: ");
                    poi[speicher].ausgabeAttribute();
                    tauschen(speicher, unten);            
                    unten++;
                    System.out.println("Abstand zu diesem Punkt= " + kurz);
            }
        }
    
    private void tauschen(int index1, int index2)
        {
            Punkt temp = punkte[index1];
            this.punkte[index1] = punkte[index2];
            this.punkte[index2] = temp;
        }

    public void poiAbfahren()
        {
            punktEingeben();
            poiSortieren(punkte);
        }
    
    public ArrayList<Rechteck> hindernislisteErzeugen()
        {
            System.out.println("Geben Sie die Anzahl der gewünscheten Hindernisse ein: ");
            Scanner scH = new Scanner(System.in);
            int anzahlHin = scH.nextInt();
            int i = 1;
            zufallsgenerator = new Random();
            int falsch = 0;
            while(hindernisse.size() < anzahlHin)        //laufen bis länge der ArrayList = anzahlHin ist
            {
                int x = zufallszahl(999);
                int y = zufallszahl(999);
                Punkt position1 = new Punkt(x, y);
                int breite1 = zufallszahl(100);
                int laenge1 = zufallszahl(100);
                String bezeichnung1 = "Rechteck" + i;
                Color farbe1 = zufallsfarbe();
                Rechteck re = new Rechteck(position1, breite1, laenge1, bezeichnung1, farbe1);
                if(falsch == 50)
                {
                    break;
                }
                if(position1.getX() + re.getBreite() < 1000 && position1.getY() + re.getLaenge() < 1000)            //überprüfen, ob das generierte Rechteck im Feld liegt
                {
                        int a = 0;
                        boolean b = false;
                        int wahr = 0;  
                    if(hindernisse.size() > 0)
                    {
                        while(a < hindernisse.size())
                        {
                            b = re.ueberlappen(hindernisse.get(a));
                            if(b == false)
                                {
                                    falsch++;
                                    break;
                                }
                            if(b == true)
                                {
                                    wahr++;
                                    if(wahr == hindernisse.size())
                                        {
                                            hindernisse.add(re);
                                            i++;
                                            falsch = 0;
                                            break;
                                        }
                                }
                                a++;
                        }
                    }
                    
                    if(hindernisse.size() == 0)
                        {
                            hindernisse.add(re);
                        }    
                }

            }
            return hindernisse;
        }
    
        public ArrayList<Rechteck> getHindernisliste()
        {
            return hindernisse;
        }
        
    private int zufallszahl(int bis)
        {
            int zzahl = 1 + zufallsgenerator.nextInt(bis);
            return zzahl;
        }
    
    private Color zufallsfarbe()
        {
            Color zfarbe = new Color(zufallsgenerator.nextInt(256), zufallsgenerator.nextInt(256), zufallsgenerator.nextInt(256));
            return zfarbe;
        }
    
    public static void main(String[] args)
        {
            System.out.println("Willkommen. Möchten Sie eine beliebige Anzahl an Punkten so effizient wie möglich abfahren, drücken Sie die 1. \n Möchten Sie, dass ich einen Weg durch eine von ihnen vorgegebene Anzahl an Hindernissen finde, drücken Sie die 2.\n Möchten Sie mir einige persönliche Fragen stellen, drücken Sie die 3. \n Wenn Sie das Programm beenden wollen, drücken Sie die 9. \n Hinweis! \n Bestätigen Sie ihre Auswahl mit der Enter-taste. \n Die Auswahl mehrerer Optionen gleichzeigtig ist nicht möglich!");
            
            while(true)
            {
               System.out.println("Ihre Wahl: ");
               Scanner sc = new Scanner(System.in);
               int wahl = sc.nextInt();
               if(wahl == 1)
                {
                  Spielfeld sp = new Spielfeld();
                  sp.poiAbfahren();
                }
               if(wahl == 2)
                {
                  Spielfeld sp = new Spielfeld();
                  sp.hindernislisteErzeugen();
                }
               if(wahl == 3)
                {
                  Roboter ro = new Roboter();
                  ro.spracherkennung();
                }
               if(wahl == 9)
                {
                   System.out.println("Vielen Dank für Ihren Besuch. Auf Wiedersehen.");
                   break;
                }
               System.out.println("Ich hoffe Sie waren mit den ergebnissen zufrieden ^^. Ihre Optionen: \n 1 - poi \n 2 - Hindernisse \n 3 - Fragen \n 9 - Ende");
            }
        }
}
Habe mal lieber alles hier rein gepackt.
Dann möchte ich in einer anderen Klasse Leinwand diese Liste zeichnen. Nur wenn ich diese Methode oder die zweite Möglichkeit, die mir eingefallen ist, die getHindernisliste() dort aufrufen möchte, gibt er mir einen Fehler, dass er die Methode nicht kennt.

Klasse Leinwand:
Java:
import javax.swing.*;  //Enthält meisten Swing-Operationen
import java.util.*;
import java.awt.*;
import java.util.List;

public class Leinwand
{
    public static void main(String[] args)
    {
        JFrame fenster = new JFrame("Robotersimulation");    //erstellt den unsichtbaren JFrame(Fenster) "Robotersimulation"
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //legt die Aktion fest, die beim "x"-drücken ausgeführt wird; hier Fenster schließen und Programm beenden
        fenster.setSize(1000, 1000);    //Größe auf 1000x1000
        fenster.setVisible(true);       //macht den JFrame sichtbar
        
        /*  JLabel label = new JLabel("Lebe immer First-Class, sonst tun es deine Erben!");
        *   label.setForeground(Color.blue);
        *   fenster.add(label);
        *   Scanner sc = new Scanner(System.in);
        *   String neu = sc.nextLine();
        *   label.setText(neu);
        */
       
        
    }
    
    
    private class Zeichenflaeche extends JPanel
    {
        
    }
}
Für jede Hilfe dankbar.
 
S

Starlordinator

Schick mal die exakte Fehlermeldung
Also so ähnlich würde ich das versuchen
Java:
public class Leinwand
    {
    public void getListe()
    {
        ArrayList<Rechteck> liste = getHindernisliste();
    }
also in Leinwand, den Rest hab ich jetzt weggelassen.
Da kommt: "cannot find symbol - method getHindernisliste()"
 
Kirby_Sike

Kirby_Sike

Also das liegt daran das es diese Klasse in Leinwand nicht gibt ;) Die Methode existiert in Spielfeld ;) Deshalb braucht man Objekt vom Typ Spielfeld ;)
 
Thema: 

ArrayList in andere Klasse übernhemen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben