Java谜题:小丑


这是一系列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();
    }
}