从另一个类访问ArrayList,而不必将方法和变量更改为静态,除非这不是问题



我是Java编程的新手,一直在为一学期的作业而挣扎。除其他外,我在一个类中创建ArrayList,并在另一个类中将其作为执行进一步任务的信息基础进行访问时遇到了问题。下面是我一直遇到的问题。如果有人也有兴趣帮助开发与我一起作为辅助项目的项目的算法,请告诉我;(

以下是应该创建ArrayList holzZuschnittResource的类:

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;
}
}

这里是应该访问ArrayListholzZuschnittResource的类:

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类添加一个构造函数,该构造函数提供对Verarbeitung对象的引用作为参数。

例如:

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);
...

这是解决你问题的几种方法之一。我希望这能帮助你找到解决方案。

最新更新