Поскольку « границы обзора » устарели в Scala 2.11, альтернативная реализация общего двоичного дерева поиска с использованием « границ контекста » ниже:
object GenericBinarySearchTree {
abstract class Set[T] {
def incl(x: T): Set[T]
def contains(x: T): Boolean
def union(that: Set[T]): Set[T]
}
type L[X] = X => Ordered[X]
class Empty[T : L] extends Set[T] {
override def toString = "."
def incl(x: T): Set[T] = new NonEmpty(x, new Empty, new Empty)
def contains(x: T): Boolean = false
def union(that: Set[T]): Set[T] = that
}
class NonEmpty[T : L](elem: T, left: Set[T], right: Set[T]) extends Set[T] {
override def toString = "{" + left + elem + right + "}"
def incl(x: T): Set[T] = {
if(x > elem) new NonEmpty(elem, left, right.incl(x))
else if(x < elem) new NonEmpty(elem, left.incl(x), right)
else this
}
def contains(x: T): Boolean = {
if(x == elem) true
else if(x > elem) right.contains(x)
else left.contains(x)
}
def union(that: Set[T]): Set[T] = ((left union right) union that) incl elem
}
}
Добро пожаловать в Переполнение стека. (Я говорю об этом, потому что думаю, что вы используете его впервые, так как вы включили в описание вопроса весь код, который у вас был. В будущих вопросах старайтесь сосредоточиться только на коде, в котором, по вашему мнению, лежит проблема. В любом случае, я надеюсь, вам понравится наше сообщество).
Теперь давайте сосредоточимся здесь:
public String toString() {
Itime totalTime = new Itime(minutes, seconds);
String toString=this.minutes +" minutes and "+this.seconds+" seconds";
return toString;
}
Прежде всего, вам не нужно создавать другой экземпляр класса Itime
, потому что у вас уже есть доступ к переменным внутри toString()
метод. Кроме того, этот метод не сломан; все работает нормально.
Теперь проверьте конструктор:
public Itime(int minutes, double seconds) {
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
}
Вы никогда не назначаете minutes
или seconds
экземпляру класса ITime
. Вот почему, когда вы пытаетесь распечатать любой данный экземпляр (я думаю, через консоль), вы всегда получите в результате значения по умолчанию (нули).
Конструктор должен выглядеть примерно так:
public Itime(int minutes, double seconds) {
assert(minutes >= 0 && seconds >= 0 && seconds < 60);
this.minutes = minutes;
this.seconds = seconds;
}
Надеюсь, это поможет!