Как правильно использовать метод toString? - PullRequest
0 голосов
/ 07 марта 2019

Итак, я начинаю работу над проектом Computer Science Lab, в основном мы создаем трекер времени активности.Цель этой программы - ввести минуты и секунды в консоль, и программа примет эти значения и напечатает общее время, повторяя процесс до тех пор, пока пользователь не введет недопустимый номер, при котором программа завершит работу.

Большая часть класса ActivityManager была закончена и создана профессором, и только несколько строк необходимо изменить, и это отмечено комментарием.

Вот этот класс:

{
public static void main(String[] args) 
{
    // declare totalTime and activityTime of type Itime 
    Itime totalTime, activityTime;
    int minutes; double seconds; // user input values
    Scanner input = new Scanner (System.in); // to read user input

    // display purpose and author
    System.out.println ("This program tracks total time in minutes");  
    System.out.println ("and seconds for a series of activities."); 
    System.out.println ();  // print blank line
    System.out.println ("Author: ");
    System.out.println ();  // print blank line 

    // specify format for input 
    System.out.println ("Enter activity time in minutes and" 
        + " seconds, all in a");   
    System.out.println ("single line with spaces in between.  Entering" 
        + " values" ); 
    System.out.println ("outside appropriate ranges will terminate"
        + " the program."); 
    System.out.println ();  // print blank line

    // create the totalTime object of type Itime with 0 minutes and 0.0 seconds
    totalTime = new Itime(0,0.0);
    System.out.println ("Total time so far is: "
        + totalTime.toString()); 
    System.out.println ();  // print blank line

    // prompt and read time for an activity 
    System.out.print ("Enter time for an activity: ");   
    minutes = input.nextInt(); 
    seconds = input.nextDouble();

    // Accumulate if appropriate 
    while (minutes >= 0 && seconds >= 0 && seconds < 60) {
        // create the activityTime object of type Itime with given minutes and seconds
        activityTime = new Itime(minutes,seconds);
        // add totalTime and activityTime and put the result in totalTime
        totalTime = totalTime.addItime(activityTime);      
        System.out.println ("Total time so far is: "
            + totalTime.toString()); 
        System.out.println ();  // print blank line

        // prompt and read time for another activity
        System.out.print ("Enter time for an activity: ");   
        minutes = input.nextInt(); 
        seconds = input.nextDouble(); 
    }

    // wrap up and print final total
    System.out.println ("Sentinel received"); 
    System.out.println ();  // print blank line 
    System.out.println ("Total time so far is: "
        + totalTime.toString()); 
System.out.println ();  // print blank line

    // print closing remarks
    System.out.println ("Program has terminated."); 
    System.out.println ();  // print blank line 
}

Нам было поручено завершить проект путем создания класса Itime, который находится здесь:

{
private int minutes;
private double seconds;
public Itime(int minutes, double seconds){
    assert(minutes >= 0 && seconds >= 0 && seconds < 60);
}
public int getMinutes(){return minutes;}
public double getSeconds(){return seconds;}
public String toString(){
Itime totalTime = new Itime(minutes, seconds);
    String toString=this.minutes +" minutes and "+this.seconds+" seconds";
return toString;}
public Itime addItime(Itime bTime){
    int totalMinutes = this.minutes+bTime.getMinutes();
    double totalSeconds =  this.seconds+bTime.getSeconds();
    if(totalSeconds>60){
    totalSeconds-=60;
    totalMinutes+=1;
    }
    Itime totalTime = new Itime(totalMinutes,totalSeconds);
    return totalTime;
}

Моя проблема с этим проектом заключается в том, что независимо от того, какие значения я ввожу, он возвращает начальное значение по умолчанию:0 минут и 0,0 секунд.Первоначально я полагал, что моей проблемой был метод addItime, но после просмотра кода я считаю, что проблема заключается в методе toString.

Консоль выводит следующее:

Эта программа отслеживает общее время вминуты и секунды для серии действий.

Автор: Версия: 25 января 2019

Введите время активности в минутах и ​​секундах, все в одной строке с пробелами между ними.Ввод значений за пределами соответствующих диапазонов приведет к завершению программы.

Общее время: 0 минут и 0,0 секунд

Введите время для действия: 20 20

Общее времядалеко: 0 минут и 0,0 секунд

Введите время для действия:

Есть предложения?

1 Ответ

2 голосов
/ 07 марта 2019

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

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

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

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

...