簡體   English   中英

如何在Java中為兩個不同的對象調用相同的方法

[英]How to call the same method for two different objects in Java

我正在編寫一個程序,旨在讓兩個不同的礦工收集地圖資源並將其帶回他們所屬的城市。 這是描述其集合的方法:

public void harvest(ArrayList<Resource> rez, SimpleWindow w) {
    double min = Integer.MAX_VALUE;
    int tracker = 0;
    for (int i = 0; i < rez.size(); i++) {
        if (Math.hypot(rez.get(i).getX() - this.x, rez.get(i).getY() - this.y) < min) {
            min = Math.hypot(rez.get(i).getX() - this.x, rez.get(i).getY() - this.y);
            tracker = i;
        }
    }
    moveTo(rez.get(tracker).getX(), rez.get(tracker).getY(), w, rez);
    this.value = this.value + rez.get(tracker).getValue();
    SimpleWindow.delay(200);
    rez.get(tracker).undraw(w);
    rez.remove(tracker);
    moveTo(city.getX(), city.getY(), w, rez);
    city.addResource(this.value);
    SimpleWindow.delay(200);

}

當我在像這樣的無限while循環中為兩個不同的礦工調用此方法時(其中r是資源對象的ArrayList,而w是我的圖形窗口)...

Miner robot = new Miner(500, 235, city1);
Miner robot1 = new Miner(850, 430, city2);
while (true){
    robot.harvest(r, w);
    robot1.harvest(r, w);
    city1.draw(w);
}

...他們只是輪流收集資源,而不是同時進行。 我了解原因,但無法解決問題。

我嘗試使用像這樣的單獨線程...

Thread t1 = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true){
            robot.harvest(r, w);
        }
    }
});

Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true){
            robot1.harvest(r, w);
        }
    }
});

這在礦工同時進行開采的過程中起到了一定作用,但同時也產生了一系列圖形故障和資源對象的ArrayList問題。 有辦法解決這個問題嗎?

您應該在ArrayList中使用Collections.synchronizedList()

至於圖形故障,不是很確定。

暫無
暫無

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

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