Добро пожаловать в Переполнение стека. (Я говорю об этом, потому что думаю, что вы используете его впервые, так как вы включили в описание вопроса весь код, который у вас был. В будущих вопросах старайтесь сосредоточиться только на коде, в котором, по вашему мнению, лежит проблема. В любом случае, я надеюсь, вам понравится наше сообщество).
Теперь давайте сосредоточимся здесь:
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;
}
Надеюсь, это поможет!
Нет, я не думаю, что вы можете сделать это с атрибутами. Вы можете заключить два
в
- но для атрибутов, я боюсь, нет эквивалентной конструкции.
Марк совершенно прав ... Вы не можете иметь дочерние элементы xs: attribute внутри родительского элемента xs: choice в XSD
Логика, по-видимому, заключается в том, что если два экземпляра элемента имеют взаимоисключающий набор атрибутов, то они являются логически двумя различными элементами.
Обходной путь для этого был представлен Джени Теннисон здесь .