簡體   English   中英

從另一個 class 訪問 ArrayList 而無需將方法和變量更改為 static,除非這不是問題

[英]Access ArrayList from another class without having to change the methods and variables to static, unless this is not an issue

我是 Java 編程的完全新手,並且一直在努力完成學期作業。 除其他事項外,我在一個 class 中創建 ArrayList 並在另一個中訪問它作為執行進一步任務的信息基礎時遇到問題。 下面是我一直遇到的問題。 如果有人也有興趣與我一起幫助開發該項目的算法,請告訴我;)

這是 class 應該在其中創建 ArrayList holzZuschnittRessource :

public class Verarbeitung {

    private ArrayList<Auftrag> auftraegeBearbeitung = new ArrayList<Auftrag>();
    public ArrayList<Holz> holzZuschnittRessource = new ArrayList<Holz>();
    public ArrayList<Holz> holzZuschnittAuftrag = new ArrayList<Holz>();
    private Ressourcendatei ressourcendatei;
    private Auftragsdatei auftragsdatei;

    public Verarbeitung(Ressourcendatei ressourcendatei, Auftragsdatei auftragsdatei) {
        this.ressourcendatei = ressourcendatei;
        this.auftragsdatei = auftragsdatei;
        this.auftragswahl();

    }

    private void auftragswahl() {

        for (int i = 0; i < auftragsdatei.getAuftraege().size(); i++) {

            Auftrag auftrag = auftragsdatei.getAuftraege().get(i);

            ArrayList<Scharnier> scharniereauftrag = new ArrayList<Scharnier>();
            scharniereauftrag = auftrag.getScharniere();
            boolean scharnierVorhanden = false;
            HashMap<String, Scharnier> scharniereressource = ressourcendatei.getScharniere();

            if (scharniereauftrag.size() != 0) {
                for (int j = 0; j < scharniereauftrag.size(); j++) {

                    for (Entry<String, Scharnier> scharnier : scharniereressource.entrySet()) {
                        // for (int k = 0; k < scharniereressource.size(); k++) {

                        if (scharniereauftrag.get(j).getKennung().equals(scharnier.getValue().getKennung())
                                && scharniereauftrag.get(j).getAnzahl() <= scharnier.getValue().getAnzahl()) {
                            // if
                            // (scharniereauftrag.get(j).getKennung().equals(scharniereressource.get(k).getKennung())
                            // && scharniereauftrag.get(j).getAnzahl() <=
                            // scharniereressource.get(k).getAnzahl()) {
                            scharnierVorhanden = true;
                        }

                    }
                }
            } else {
                scharnierVorhanden = true;
            }

            ArrayList<Schiene> schienenauftrag = new ArrayList<Schiene>();
            schienenauftrag = auftrag.getSchienen();
            boolean schieneVorhanden = false;
            HashMap<String, Schiene> schienenressource = ressourcendatei.getSchienen();
            if (schienenauftrag.size() != 0) {
                for (int j = 0; j < schienenauftrag.size(); j++) {

                    for (Entry<String, Schiene> schiene : schienenressource.entrySet()) {

                        if (schienenauftrag.get(j).getLaenge() >= schiene.getValue().getLaengeMin()
                                && schienenauftrag.get(j).getLaenge() <= schiene.getValue().getLaengeMax()) {
                            schieneVorhanden = true;
                        }

                    }

                    /*
                     * for (int k = 0; k < schienenressource.size(); k++) {
                     * 
                     * if (schienenauftrag.get(j).getLaenge() >=
                     * schienenressource.get(k).getLaengeMin() && schienenauftrag.get(j).getLaenge()
                     * <= schienenressource.get(k).getLaengeMax()) { schieneVorhanden = true; }
                     * 
                     * }
                     */
                }
            } else {
                schieneVorhanden = true;
            }

            ArrayList<Holz> holzauftrag = new ArrayList<Holz>();
            holzauftrag = auftrag.getBretter();
            boolean holzVorhanden = false;

            if (holzauftrag.size() != 0) {

                for (int j = 0; j < holzauftrag.size(); j++) {
                    HashMap<String, Holz> holzressource = ressourcendatei.getBretter();

                    for (Entry<String, Holz> holz : holzressource.entrySet()) {

                        if (holzauftrag.get(j).getKennung().equals(holz.getValue().getKennung())) {
                            if (holzauftrag.get(j).getStaerke() == holz.getValue().getStaerke()) {
                                if (holzauftrag.get(j).getBreite() <= holz.getValue().getBreite() - 2) {
                                    if (holzauftrag.get(j).getHoehe() <= holz.getValue().getHoehe() - 2) {
                                        if (holzauftrag.get(j).getAnzahl() <= holz.getValue().getAnzahl()) {

                                            holzVorhanden = true;
                                            if (scharnierVorhanden == true && schieneVorhanden == true) {
                                                
                                                this.holzZuschnittRessource.add(holz.getValue());
                                                this.holzZuschnittAuftrag.add(holzauftrag.get(j));

                                                holz.getValue().subtrahiereAnzahl(holzauftrag.get(j).getAnzahl());

                                            }
                                        }
                                    }

                                }
                            }
                        }
                    }
                }
            } else {
                holzVorhanden = true;
            }

            if (scharnierVorhanden == true && schieneVorhanden == true && holzVorhanden == true) {

                for (int j = 0; j < scharniereauftrag.size(); j++) {
                    for (Entry<String, Scharnier> scharnier : scharniereressource.entrySet()) {

                        if (scharniereauftrag.get(j).getKennung().equals(scharnier.getValue().getKennung())) {

                            scharnier.getValue().subtrahiereAnzahl(scharniereauftrag.get(j).getAnzahl());
                        }

                    }

                }

                for (int j = 0; j < schienenauftrag.size(); j++) {
                    for (Entry<String, Schiene> schiene : schienenressource.entrySet()) {

                        if (schienenauftrag.get(j).getKennung().equals(schiene.getValue().getKennung())) {

                            schiene.getValue().subtrahiereAnzahl(schienenauftrag.get(j).getAnzahl());
                        }

                    }

                }

                this.auftraegeBearbeitung.add(auftrag);

            }

        }
    }
    public ArrayList<Holz> getHolzZuschnittRessource () {
        auftragswahl();
        ArrayList<Holz> holzZuschnittRessource2 = holzZuschnittRessource;
        return holzZuschnittRessource2;
    }
    
    public ArrayList<Holz> getHolzZuschnittAuftrag () {
        auftragswahl();
        ArrayList<Holz> holzZuschnittRessource2 = holzZuschnittRessource;
        return holzZuschnittRessource2;
    }

}

在這里class應該訪問 ArrayList holzZuschnittRessource:

 public class Zuschnitt {   
    ArrayList<Holz> auftraege = Verarbeitung.getHolzZuschnittAuftrag();
    ArrayList<Holz> ressourcen = Verarbeitung.getHolz();
    
    
    
    //Mit 1cm verschenktes Material an den Aussenraendern rechnen
    public ArrayList<Holz> Aussenrand (ArrayList <Holz> ressourcenListe) {
        for (Holz ressource : ressourcenListe) {
            ressource.setBreite(ressource.getBreite() - 2);
            ressource.setHoehe(ressource.getHoehe() - 2);
        }
        return ressourcenListe;  
    }
    
    public boolean MinZuschnittsgroesse () {
        for (Holz auftrag : auftraege) {
            if (auftrag.getBreite() < minZuschnittsgroesse || auftrag.getHoehe() < minZuschnittsgroesse) {
                System.out.println("Zuschnittgroesse in " + auftrag + "zu klein fuer Maschine"); //TODO: spaeter Dialogfeld und entscheiden wie es weiter macht wenn zu klein
                return false;
            }
        }
        return true;
    }
    
    public void FraeseBeladen () {
        standbyModus = true;
        }
    
    public Zuschnitt (ArrayList<Holz> auftraege, ArrayList<Holz> ressourcen, int gefahreneStrecke) {
        //hier spaeter pruefen ob es sich um Holz handelt, z.B. if (auftrag startsWith(Holz.KEYWORD))
        FraeseBeladen ();   //TODO: ueberlegen wie Verarbeitungsdatei einbinden
        for (Holz auftrag : auftraege) {
        for (Holz ressource : Aussenrand(ressourcen)) {
            //zuerst wird nach eine passende Holzplatte gesucht 
            if (auftrag.getBreite() <= ressource.getBreite() && auftrag.getHoehe() <= ressource.getHoehe()
                    && ressource.getAnzahl() > 0 && MinZuschnittsgroesse()) {
                standbyModus = false;
                xAchse = xAchse + auftrag.getBreite() + schneideDurchmesser; //Erweitererbarkeit andere Schneide Durchmesser moeglich
            //TODO:wefwefwefwefwefwef
                yAchse = yAchse + auftrag.getHoehe();
                xAchse = xAchse - auftrag.getBreite();
                yAchse = yAchse - auftrag.getHoehe();
                ressource.setAnzahl(ressource.getAnzahl() - 1);
                //gefahreneStrecke = gefahreneStrecke + auftrag.getBreite() * 2 + auftrag.getHoehe() * 2;
            }
        }
        }
    }
}

向您的Zuschnitt class 添加一個構造函數,該構造函數提供對您的Verarbeitung object 作為參數的引用。

例如:

public class Zuschnitt {   
    ArrayList<Holz> auftraege;
    ArrayList<Holz> ressourcen;
    
    public Zuschnitt(Verarbeitung verarbeitung){
        ArrayList<Holz> auftraege = verarbeitung.getHolzZuschnittAuftrag();
        ArrayList<Holz> ressourcen = verarbeitung.getHolz();
    }

    ...
}

在我們在這里看不到的實際程序中,您肯定會在某處創建VerarbeitungZuschnitt的實例。 在那里,您使用Verarbeitung創建Zuschnitt

像這樣:

Verarbeitung verarbeitung = new Verarbeitung();
...
Zuschnitt zuschnitt = new Zuschnitt(verarbeitung);
...

這是解決您的問題的幾種方法之一。 我希望這可以幫助您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM