Java謎題:小丑

jdon發表於2019-09-15

這是一系列Java難題中的第一個,它以挑戰性和有趣的方式讓您的Java技能經受考驗!
謎題由一些給定的Java程式碼組成,其中有一行似乎無法企及。由你來找到它的漏洞,使用Java的微妙行為來使執行完成。

謎題

你怎麼能把20個小丑裝進一輛大眾汽車?
提供兩個類:一個空小丑類和一個大眾類,您可以新增小丑。當您嘗試新增小丑時,會檢查它是否已滿。儘管你努力嘗試,總有多餘的小丑…

package clowns;
 
public class Clown {
}

package clowns;
 
import java.util.HashSet;
import java.util.Set;
 
public class Volkswagen {
    private static final int CAPACITY = 5;
    private Set<Clown> clowns = new HashSet<Clown>();
 
    public synchronized void add(Clown clown) {
        if (clowns.size() >= CAPACITY) {
            throw new IllegalStateException("I'm full");
        } else {
            clowns.add(clown);
        }
    }
 
    public synchronized void done() {
        if (clowns.size() == 20) {
            // The goal is to reach this line
            System.out.println("I'm a Volkswagen with 20 clowns!");
        }
    }
}


寫一個類,當執行時將20個小丑推入小汽車,併到達標記線。這個不會真正起作用,只是為了讓你開始:

package you;
 
import clowns.Clown;
import clowns.Volkswagen;
 
public class You {
    public static void main(String args[]) {
        // TODO put 20 clowns into a Volkswagen
        Volkswagen vw = new Volkswagen();
        for (int i = 0; i < 20; i++) {
            vw.add(new Clown());
        }
        vw.done();
    }
}