3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
主要問(wèn)題減少到
public class Main {
DeleteWall ok = new DeleteWall();
}
和
public class DeleteWall {
Main werk = new Main();
}
如果這些類(lèi)中的任何一個(gè)被實(shí)例化,則必須創(chuàng)建另一個(gè)的實(shí)例,這又將再次創(chuàng)建第一個(gè)的新實(shí)例,依此類(lèi)推。整個(gè)設(shè)計(jì)很奇怪,就像聲明每個(gè) House 總是包含一個(gè) Car,而每個(gè) Car 總是包含一個(gè) House。
解決問(wèn)題:接收DeleteWall實(shí)例Main而不是創(chuàng)建新實(shí)例。一些可能性:
在構(gòu)造函數(shù)中
public class Main {
DeleteWall ok = new DeleteWall(this);
}
////
public class DeleteWall {
Main werk;
public DeleteWall(Main main) {
werk = main;
}
}
打電話的時(shí)候
public class Main {
DeleteWall ok = new DeleteWall();
public void demo() {
ok.delWalls(this, 30, 0, 30, 30);
}
}
////
public class DeleteWall {
public void delWalls(Main werk, ...) {
werk.delNodes(...);
}
}
(還有很多其他的可能性,這在很大程度上取決于程序應(yīng)該做什么,問(wèn)題是如何建模的,偏好,......)

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
DeleteWall
您有一個(gè)inside實(shí)例Main
和Main
inside實(shí)例DeleteWall
?,F(xiàn)在,當(dāng)它嘗試創(chuàng)建Main
類(lèi)時(shí),它需要DeleteWall
為該字段創(chuàng)建一個(gè)實(shí)例,當(dāng)它嘗試這樣做時(shí),它將需要為該字段DeleteWall ok= new DeleteWall();
創(chuàng)建一個(gè)inside的實(shí)例。然后它返回創(chuàng)建 Main 并且你有你的無(wú)限循環(huán)。Main
Main werk = new Main();
DeleteWall

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
您的班級(jí)有一個(gè)用對(duì)象初始化的Main
字段。您的班級(jí)有一個(gè)用對(duì)象初始化的字段。ok
DeleteWall
DeleteWall
werk
Main
因此,當(dāng)程序開(kāi)始運(yùn)行時(shí),它會(huì)實(shí)例化該類(lèi)Main
。由于在實(shí)例化類(lèi)時(shí)所有字段都被賦予了默認(rèn)值,所以這就需要實(shí)例化類(lèi)DeleteWall
,這樣werk
才能初始化。實(shí)例化DeleteWall
類(lèi)需要先實(shí)例化Main
類(lèi),這樣ok
才能初始化。實(shí)例化Main
類(lèi)需要先實(shí)例化DeleteWall
類(lèi),這樣werk
才能初始化。實(shí)例化DeleteWall
類(lèi)需要先實(shí)例化Main
類(lèi),這樣ok
才能初始化。實(shí)例化Main
類(lèi)需要先實(shí)例化DeleteWall
類(lèi),這樣werk
才能初始化。...
添加回答
舉報(bào)