2015-04-13 1 views
0

Я пытаюсь сделать «часы», которые делают несколько вещей:
1) Отображает указанное время как военное время (00:00:00) для полуночи)
2) Добавляет или вычитает заданное количество времени на часы с использованием объекта clock, который имеет до 3 целых параметров (h, m, s) и математический метод или другой тактовый объект
- Пример)Создание «часов», которое печатает военное время и добавляет/вычитает время

System.out.print (c1 + " + 10 hours is "); 
     c1.addHours(10); 
     System.out.println (c1); 

- Пример 2)

System.out.print (c4 + " + 12:59:55 is "); 
      c4.addTime(12,59,55); 
      System.out.println (c4); 

Так что у меня возникают проблемы с двумя вещами: математическими методами и методом toString(), который заставляет все распечатывать как следует. Я новичок в идее методов toString(), и они на самом деле не имеют особого смысла. Вот методы математики и toString(), которые у меня есть, любая помощь приветствуется.

//**********Methods to perform calculations w/ an object 

    public void addHours(int h){ 
     if(this.hours + h > 23) 
      hours = this.hours + (h % 24); 
     else 
      hours = this.hours + h; 
    } 

    public void addMinutes(int m){ 
     if(this.mins + m > 59){ 
      hours = this.hours + (m % 60); 
      mins = this.mins + (hours % (m % 60)); 
     } 
     else 
      mins = this.mins + m; 
    } 

    public void addSeconds(int s){ 
     if(this.secs + s > 59){ 
      mins = this.mins + (s % 60); 
      secs = this.secs + (mins % (s % 60)); 
     } 
     else 
      secs = this.secs + s; 
    } 

    public void addTime(int h, int m, int s){ 
     addHours(h); 
     addMinutes(m); 
     addSeconds(s); 
    } 


//Displays correctly formatted time 
    public String toString(){ 
     if(hours > 23 || hours < 0) 
      return "00:00:00"; 
     if(hours > 9) 
      return "" + getHours(); 
     if(mins > 9) 
      return "" + getMinutes(); 
     if(secs > 9) 
      return "" + getSeconds(); 

     return "0" + getHours() + ":0" + getMinutes() + ":0" + getSeconds(); 
    } 
+0

SimpleDateFormat; В Java 8 используйте Time API, иначе используйте JodaTime – MadProgrammer

+0

. Если вы не заинтересованы в использовании существующих API, я бы сохранил время как количество секунд с полуночи, намного проще добавлять/вычитать значения – MadProgrammer

ответ

0

Ваши методы add излишне сложны. Вы можете упростить их. Как и в отношении toSting(): мне кажется, что у вас есть общее заблуждение относительно return. Оператор return завершает метод. Если ваша программа встречается с return, остальная часть кода метода не выполняется. Заявление о возврате (если оно есть) оценивается и возвращается.

public void addHours(int h) { 
    // The "if" was semantically unnecessary 
    this.hours += (h % 24); 
} 

public void addMinutes(int m) { 
     // Forward to addHours, exploit integer arithmetics 
     this.addHours(m/60); 
     this.mins += (m % 60); 
} 

public void addSeconds(int s) { 
    // Forward to addMinutes, exploit integer arithmetics 
    this.addMinutes(s/60); 
    this.secs += (s % 60); 
} 
[...] 
//Displays correctly formatted time 
public String toString() { 
    if ((this.hours > 23) || (this.hours < 0)) { 
     return ("00:00:00"); 
    } 
    String result = ""; 
    // Add a leading zero 
    if (this.hours < 10) { 
     result += "0"; 
    } 
    result += (this.hours + ":"); 

    // Add a leading zero 
    if (this.mins < 10) { 
     result += "0"; 
    } 
    builder.append(this.mins + ":"); 

    // Add a leading zero 
    if (this.secs < 10) { 
     result += "0"; 
    } 
    builder.append(this.secs); 

    return (result); 
} 

EDIT: В теории можно было бы передать отрицательные значения в add методов. Если вы хотите быть в безопасности, добавьте некоторые if -закрытия, чтобы предотвратить временную подстановку.

+1

Спасибо за прояснение математический бит - и я добавил то, что я не показывал здесь, что предотвращает невозможность нереальных времен. К сожалению, мы еще не узнали о StringBuilders, и я не думаю, что я должен добавить его, потому что ... ну, не только я не знаю, как его использовать, но я также хочу сделать это так, чтобы показать, что я понимаю текущий материал. Но я посмотрю, что вы положили, и попытайтесь перевести его на то, что я сейчас знаю. – Mazzone

+0

@Mazzone создайте 'String' вместо' StringBuilder' и «добавьте» строки с '+'. – Turing85

+0

Эти математические методы вообще не работают. – Mazzone

Смежные вопросы