Как правильно использовать метод toString?

Поскольку « границы обзора » устарели в 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
}

}

0
задан Track Hub 6 March 2019 в 21:30
поделиться

1 ответ

Добро пожаловать в Переполнение стека. (Я говорю об этом, потому что думаю, что вы используете его впервые, так как вы включили в описание вопроса весь код, который у вас был. В будущих вопросах старайтесь сосредоточиться только на коде, в котором, по вашему мнению, лежит проблема. В любом случае, я надеюсь, вам понравится наше сообщество).

Теперь давайте сосредоточимся здесь:

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;
}

Надеюсь, это поможет!

0
ответ дан Jurgen Camilleri 6 March 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: