Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. package PP_Lab.Lab11
  2.  
  3. class Queue[+T] private (val l1: List[T], val l2: List[T]) {
  4.  
  5. //Exception
  6. class QueueException(message: String) extends Exception(message)
  7.  
  8. def this() = this(Nil, Nil)
  9.  
  10. // def enqueue[T](elem: T) : Queue[T] = {
  11. // (l1, l2) match {
  12. // case (Nil, Nil) => new Queue(List(elem), Nil)
  13. // case (_, _) => new Queue(l1, elem :: l2)
  14. // }
  15. // }
  16.  
  17. def enqueue[S >: T](elem: S) = {
  18. (l1, l2) match {
  19. case (Nil, Nil) => new Queue[S](List(elem), Nil)
  20. case (_, _) => new Queue[S](l1, elem :: l2)
  21. }
  22. }
  23.  
  24. def dequeue() : Queue[T] = {
  25. (l1, l2) match {
  26. case (Nil, Nil) => this
  27. case (List(_), l) => new Queue(l.reverse, Nil)
  28. case (_ :: t, l) => new Queue(t, l)
  29. }
  30. }
  31.  
  32. def first() : T = {
  33. (l1, l2) match {
  34. case (Nil, Nil) => throw new QueueException("empty")
  35. case (h :: _, _) => h
  36. case _ => throw new QueueException("sth gone wrong")
  37. }
  38. }
  39.  
  40. def isEmpty : Boolean = {
  41. l1 == Nil
  42. }
  43.  
  44. override def toString : String = {
  45. var res = ""
  46.  
  47. var qTemp = this
  48.  
  49. while (!qTemp.isEmpty) {
  50. res += qTemp.first() + "\n"
  51. qTemp = qTemp.dequeue()
  52. }
  53.  
  54. res
  55. }
  56.  
  57. override def hashCode(): Int = 2137
  58.  
  59. }
  60.  
  61. object QueueTests extends App {
  62.  
  63. var q1 = new Queue[Number]()
  64. q1 = q1.enqueue(10)
  65. q1 = q1.enqueue(20.4)
  66. q1 = q1.enqueue(0.5f)
  67.  
  68. println(q1)
  69.  
  70. var qPoints = new Queue[Point]()
  71. qPoints = qPoints.enqueue(new Point(0.0))
  72. qPoints = qPoints.enqueue(new Point(2.2))
  73. qPoints = qPoints.enqueue(new Pixel())
  74.  
  75. println("punkty:")
  76. println(qPoints)
  77.  
  78. var qPixels = new Queue[Pixel]()
  79. //qPixels = qPixels.enqueue(new Point(0,-1))
  80. qPixels = qPixels.enqueue(new Pixel())
  81. qPixels = qPixels.enqueue(new Pixel(2, 2))
  82. println("pixels:")
  83. println(qPixels)
  84.  
  85.  
  86. var qPixels2 = qPixels.enqueue(new Point(0, -1))
  87. println("pixele z punktami:")
  88. println(qPixels2)
  89.  
  90.  
  91. //rzutowanie:
  92. var element = qPixels2.first()
  93. println("kolejka")
  94. println(qPixels2.getClass.toGenericString)
  95.  
  96. println()
  97. println("element: ")
  98. println(element.isInstanceOf[Point])
  99. println(element.isInstanceOf[Pixel])
  100. println(element.getClass.toGenericString)
  101.  
  102. println()
  103. qPoints = qPixels
  104. //qPixels = qPoints //nie kompiluje siÄ™
  105. println(qPoints)
  106.  
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement