2009-12-20 67 views
-1

嗨我做了這個代碼,它會顯示當它運行一個時鐘,然後要求用戶輸入新的秒和分鐘和小時,以便他們將被添加到舊時鐘我這樣做,但結果是錯誤的地方是錯誤計時器類...沒有更新

主要

static void Main(string[] args) 
    { 
     Timer S1 = new Timer(); 
     S1.Sec = 10; 
     S1.Min = 25; 
     S1.Hour = 23; 
     S1.Read(); 
     S1.Write(); 
    } 

定時器類

namespace Uni_19 
{ 
class Timer 
{ 
    private int Seconds; 
    private int Minutes; 
    private int Hours; 
    private int Days = 0; 

    public int Sec 
    { 
     get { return Seconds; } 
     set 
     { 
      Seconds = value % 60; 
      Minutes += value/60; 
     } 
    } 
    public int Min 
    { 
     get { return Minutes; } 
     set 
     { 
      Minutes = value % 60; 
      Hour += (value/60); 
     } 
    } 
    public int Hour 
    { 
     get { return Hours; } 
     set 
     { 
      Hours = value % 24; 
      Days += value/24; 
     } 
    } 
    public int Day 
    { 
     get { return Days; } 
     set { Days = Hour/24; } 
    } 
    public int AddSec(int A) 
    { 
     Sec += A; 
     return Sec; 
    } 
    public int AddMin(int B) 
    { 
     Min += B; 
     return Min; 
    } 
    public int AddHour(int C) 
    { 
     Hour = Hour + (C % 24); 
     return Hour; 
    } 
    public int AddDay(int D) 
    { 
     Day += D; 
     return Day; 
    } 
    public void Read() 
    { 
     Console.WriteLine("Time Is: {0}", Hours + " : " + Minutes + " : " + Seconds); 
     Console.Write("Time Added (in Seconds): "); 
     Sec = int.Parse(Console.ReadLine()); 
     Console.Write("Time Added (in Minutes): "); 
     Min = int.Parse(Console.ReadLine()); 
     Console.Write("Time Added (in Houres): "); 
     Hour = int.Parse(Console.ReadLine()); 
    } 
    public void Write() 
    { 
     Console.WriteLine("New Time Is: {0}", AddDay(Day) + " : " + AddHour(Hour) + " : " + AddMin(Min) + " : " + AddSec(Sec)); 
    } 
} 
} 

thanx提前

回答

2

您正在使用設置當天的用戶輸入和添加到它。舊時間被完全覆蓋並且不被用於計算。

Sec = int.Parse(Console.ReadLine()); // Calls the setter 'Sec' which overwrites Seconds. 

最重要的是,AddSec例程可以返回一個大於60的數字,這可能不是你想要的。

你的家庭作業的規範是什麼?您的Timer類在.NET中完全沒有必要,因爲它提供的功能已經被DateTime和TimeSpan類所涵蓋。我假設你不允許這樣做,否則它會讓你的任務變得太簡單了?

可能的修復,改變Sec =AddSec等:

Console.Write("Time Added (in Seconds): "); 
AddSec(int.Parse(Console.ReadLine())); 
Console.Write("Time Added (in Minutes): "); 
AddMin(int.Parse(Console.ReadLine())); 
Console.Write("Time Added (in Houres): "); 
AddHour(int.Parse(Console.ReadLine())); 

... 

Console.WriteLine("New Time Is: {0}", Day + " : " + Hour + " : " + Min + " : " + Sec); 

完整的源代碼:

using System; 

namespace Uni_19 
{ 
    class Timer 
    { 
     private int Seconds; 
     private int Minutes; 
     private int Hours; 
     private int Days = 0; 

     public int Sec 
     { 
      get { return Seconds; } 
      set 
      { 
       Seconds = value % 60; 
       Minutes += value/60; 
      } 
     } 
     public int Min 
     { 
      get { return Minutes; } 
      set 
      { 
       Minutes = value % 60; 
       Hour += (value/60); 
      } 
     } 
     public int Hour 
     { 
      get { return Hours; } 
      set 
      { 
       Hours = value % 24; 
       Days += value/24; 
      } 
     } 
     public int Day 
     { 
      get { return Days; } 
      set { Days = Hour/24; } 
     } 
     public int AddSec(int A) 
     { 
      Sec += A; 
      return Sec; 
     } 
     public int AddMin(int B) 
     { 
      Min += B; 
      return Min; 
     } 
     public int AddHour(int C) 
     { 
      Hour = Hour + (C % 24); 
      return Hour; 
     } 
     public int AddDay(int D) 
     { 
      Day += D; 
      return Day; 
     } 
     public void Read() 
     { 
      Console.WriteLine("Time Is: {0}", Hours + " : " + Minutes + " : " + Seconds); 
      Console.Write("Time Added (in Seconds): "); 
      AddSec(int.Parse(Console.ReadLine())); 
      Console.Write("Time Added (in Minutes): "); 
      AddMin(int.Parse(Console.ReadLine())); 
      Console.Write("Time Added (in Houres): "); 
      AddHour(int.Parse(Console.ReadLine())); 
     } 
     public void Write() 
     { 
      Console.WriteLine("New Time Is: {0}", Day + " : " + Hour + " : " + Min + " : " + Sec); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Timer S1 = new Timer(); 
      S1.Sec = 10; 
      S1.Min = 25; 
      S1.Hour = 23; 
      S1.Read(); 
      S1.Write(); 
     } 
    } 
} 
+0

:-(林失去了大量的做 因此事我該怎麼定呢?! – Tony 2009-12-20 22:00:10

+0

什麼錯的方法,你可以展示我請 – Tony 2009-12-20 22:13:39

+0

更新錯誤修復的建議 – 2009-12-20 22:14:08

0

你應該考慮使用DateTime結構,而不是徹底改造它

0

這不是真的一個答案,但更多的建議:

爲了您的Write()方法,嘗試使用任何的ToString或更改你的代碼的東西更養眼:

Console.WriteLine("New Time Is: {0} : {1} : {2} : {3}",AddDay(Day),AddHour(Hour),AddMin(Min),AddSec(Sec)); 

可能會使它更容易一點讓你在將來改變。

你怎麼決定使用你自己的Timer類,它不適合使用提供的DateTime類嗎?

0

這種方法對我來說似乎有些懷疑,這是幹什麼的?

public void Write() 
{ 
    Console.WriteLine("New Time Is: {0}", AddDay(Day) + " : " + AddHour(Hour) + " : " + AddMin(Min) + " : " + AddSec(Sec)); 
} 

也請封裝字段時使用的一些約定,

private int _seconds 
public int Seconds {get;set;}