前提・実現したいこと
下のものはPriorityBlockingQueueを使用して作ったタートルグラフィックスのプログラムなのですが、これをタートルの大きさが大きい順に取得できるようにComparatorインタフェースを使用したい。
java
1import java.util.Comparator; 2import java.util.concurrent.BlockingQueue; 3import java.util.concurrent.PriorityBlockingQueue; 4import javafx.scene.paint.Color; 5import tg.Turtle; 6import tg.TurtleFrame; 7import java.util.Comparator; 8public class BlokingQueueSimulation3{ 9 BlockingQueue<Turtle> queue = new PriorityBlockingQueue<Turtle>(); 10 TurtleFrame f = new TurtleFrame(); 11 public static void main(String[] args) { 12 new BlokingQueueSimulation3().start(); 13 } 14 void start() { 15 new Thread(new TurtleProducer(10, 50.0)).start(); 16 new Thread(new TurtleProducer(10, 200.0)).start(); 17 new Thread(new TurtleProducer(10, 300.0)).start(); 18 new Thread(new TurtleConsumer(10, 350.0)).start(); 19 new Thread(new TurtleConsumer(20, 200.0)).start(); 20 new Thread(new TurtleConsumer(30,100.0)).start(); 21 } 22 class TurtleProducer implements Runnable { 23 private int n = 0; 24 private double ypos = 200.0; 25 final double xpos = 50.0; 26 TurtleProducer(int n, double ypos) { 27 this.n = n; this.ypos = ypos; 28 } 29 public void run() { 30 for(int i = 0; i < n; i++) { 31 Turtle t = new Turtle(xpos, ypos, 90.0); 32 f.add(t); 33 int speed = (int)((Math.sin(i / 3.0) + 1.5) * 50.0); 34 t.speed(speed); 35 t.setTScale((i+1.0)/20.0); 36 t.setTColor(Color.BLUE); 37 t.moveTo(200.0, 200.0); 38 t.setTColor(Color.BLACK); 39 try { 40 queue.put(t); // タートルをキューに追加する 41 42 } catch(Exception e) { } 43 } 44 } 45 } 46 class TurtleConsumer implements Runnable { 47 private int n = 0; 48 private double ypos = 200.0; 49 final double xpos = 350.0; 50 TurtleConsumer(int n, double ypos) { 51 this.n = n; this.ypos = ypos; 52 } 53 public void run() { 54 for(int i = 0; i < n; i++) { 55 try { 56 Turtle t = queue.take(); // タートルをキューから取り出す 57 queue.comparator(); 58 int speed = (int)((-Math.cos(i / 3.0) + 1.5) * 50.0); 59 t.speed(speed); 60 t.setTColor(Color.RED); 61 t.moveTo(xpos, ypos); 62 f.remove(t); 63 }catch(Exception e) { } 64 } 65 } 66 } 67}
該当のソースコード
java
1queue.comparator();
ここでcomparator()は未定義ですと出てしまいます
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。