问题描述
怎样用swing做一个类似于摇奖的程序,从100个数字中,每次屏幕显示不重复的5个数字,点停止的时候,屏幕显示当前5个数字。即为中奖号码??? 问题补充:<div class="quote_title">langshao 写道</div><div class="quote_div"><pre name="code" class="java">boolean running = true; // 点停止时设为false,类变量Random random = new Random();Set<Integer> finalResult = null;while (running) {Set<Integer> result = new HashSet<Integer>(5);while (result.size() < 5) {result.add(random.nextInt(100) + 1);}show(result); // 重新显示result, 你可以自己实现吗?finalResult = result;}</pre></div><br /><br /><br /><br /><br />show(result); // 重新显示result, 你可以自己实现吗?<br />重新显示:是啥意思呢
解决方案
引用麻烦看下附件,很奇怪,我把 /* ************* 就是这一段 **********/ 标注之间的代码移到 paint(方法里以后。 run()方法的循环条件即使为false停止循环了,但是界面上还是在不停的repaint。 repaint只是发送了一个事件,虽然停止了,但paint还没做完,所以会继续做。this.repaint(); 换成 this.paint(); 就好了。引用但是把那一段代码放到run()方法的this.repaint();之前,就可以正常停止循环。但是运行的时候,有时会报错ArrayList是线程不安全的,所以可能会出错。可以这样写 list = Collections.synchronizedList(new ArrayList());
解决方案二:
引用我发现有时候在this.repaint();没有执行完的时候,就重新开始下一轮的循环,导致list.clear(); //每次循环前 清空原有list的内容为空了。然后this.repaint();没有执行完,里面的for循环list为空,就会出错了。 怎么办呢?把 list 放在 paint 那里生成,每过一段时间 repaint 一次就好了。
解决方案三:
引用show(result); // 重新显示result, 你可以自己实现吗? 重新显示:是啥意思呢就是把结果显示到屏幕。因为原来有显示五个数字了,要先去掉,再显示新的五个,所以说“重新显示”。
解决方案四:
boolean running = true; // 点停止时设为false,类变量Random random = new Random();Set<Integer> finalResult = null;while (running) {Set<Integer> result = new HashSet<Integer>(5);while (result.size() < 5) {result.add(random.nextInt(100) + 1);}show(result); // 重新显示result, 你可以自己实现吗?finalResult = result;}