2013-11-29 65 views
0

我做了24小時制。我有下面的代碼。我的問題是int[]時間等於[0, 0, 0]並在每次迭代中打印出來。
更多可能對您有幫助的信息。我的Array TimeCounter[hours, minutes, seconds]。重置方法將選定的int值設置爲零,保持不變或增加1。嵌套的while循環用於通過時鐘。我在做24小時制

public static int hours; 
public static int minutes; 
public static int seconds; 
public static int [] TimeCounter = {hours, minutes, seconds}; 

//End of day 
public static void reset(int [] midNight){ 
    hours = 0; 
    minutes = 0; 
    seconds = 0; 
} 

//End of a minute 
public static void resetSeconds(int [] endOfMin){ 
    minutes++; 
    seconds = 0; 
} 

//End of a Hour 
public static void resetMinutes(int [] endOfHour){ 
    hours++; 
    minutes = 0; 
    seconds = 0; 
} 
public static void run(int [] time){ 
    hours = 0; 
    minutes = 0; 
    seconds = 0; 
    System.out.println(Arrays.toString(time)); 
    while (hours < 25){ 
     if (hours == 24){ 
      if (minutes == 59){ 
       if (seconds == 60){ 
        reset(time); 
       } 
      } 
     } 
     while (minutes < 61){ 
      if (minutes == 59){ 
       if (seconds == 60){ 
        resetMinutes(time); 
        System.out.println(Arrays.toString(time)); 
       } 
      } 
      while (seconds < 61){ 
       if (seconds == 60){ 
        resetSeconds(time); 
       } 
       System.out.println(Arrays.toString(time)); 
       seconds++; 

      } 
      System.out.println(Arrays.toString(time)); 
      minutes++; 
     } 
     System.out.println(Arrays.toString(time)); 
     hours++; 
    } 

} 

public static void main(String[] args){ 

    run(TimeCounter); 
} 
+0

你不能使用面向對象的概念都對這一計劃?這些指導是否強制你使用靜態的一切?啊。 –

+0

你真的應該擺脫陣列,只使用變量。 – MultiplyByZer0

+0

@HovercraftFullOfEels - 現在看來,編程類的介紹開始於用OO語言編寫程序代碼。許多例子只有'main'方法。 –

回答

5

數組保存的整數與變量中的整數並不相同。是的,你用變量初始化數組,但在此之後,數組int項是獨立的。如果你想在數組中增加一個int項目,你必須直接這樣做:myArray[someIndex]++

順便說一句,根據我的評論,你不允許在這個程序中使用面向對象的概念嗎?這些指導是否強制你使用靜態的一切?我問這個問題的原因是因爲一個好得多的程序不會像你這樣使用數組,而是在秒,分和小時內都會有int字段,並且封裝了幾秒到幾分鐘到幾個小時的邏輯。這將是更容易維護和提高。


編輯
例如:

public class FooClock { 
    public static final int SECONDS_PER_MINUTE = 60; 
    public static final int MINUTES_PER_HOUR = 60; 
    private static final int NOON = 12; 
    private int hours; 
    private int minutes; 
    private int seconds; 
    private boolean am = true; 
    private String formatString = "%02d:%02d:%02d %s"; 

    public FooClock(int hours, int minutes, int seconds, boolean am) { 
     this.hours = hours; 
     this.minutes = minutes; 
     this.seconds = seconds; 
     this.am = am; 
    } 

    public void incrementSeconds() { 
     seconds++; 
     normalize(); 
    } 

    public void incrementMinutes() { 
     minutes++; 
     normalize(); 
    } 

    public void incrementHours() { 
     hours++; 
    } 

    public void normalize() { 
     if (seconds >= SECONDS_PER_MINUTE) { 
     minutes += seconds/SECONDS_PER_MINUTE; 
     seconds %= SECONDS_PER_MINUTE; 
     } 
     if (minutes >= MINUTES_PER_HOUR) { 
     hours += minutes/MINUTES_PER_HOUR; 
     minutes %= MINUTES_PER_HOUR; 
     } 
     if (hours >= 2 * NOON) { 
     hours %= (2 * NOON); 
     am = true; 
     } 
     if (hours >= NOON) { 
     am = false; 
     } 
    } 

    @Override 
    public String toString() { 
     String amString = am ? "AM" : "PM"; 
     return String.format(formatString, hours, minutes, seconds, amString); 
    } 

    public static void main(String[] args) { 
     int total_seconds = 24 * SECONDS_PER_MINUTE * MINUTES_PER_HOUR; 

     FooClock fooClock = new FooClock(0, 0, 0, true); 
     System.out.println(fooClock); 
     for (int i = 0; i < total_seconds; i++) { 
     fooClock.incrementSeconds(); 
     System.out.println(fooClock + " "); 
     } 
    } 
} 
+0

謝謝你回答我的問題,但今天早上我做了一個for循環。如果您想查看,我將它張貼在下面。 –

0

我所做的是改變,而環成一個for循環使用幾乎一模一樣的代碼。我還添加了像「AM」和「PM」出頭

public static int hours; 

public static int minutes; 

public static int seconds; 

public static int [] TimeCounter = {hours, minutes, seconds}; 

public static void run(int h, int m, int s){ 
    hours = h; 
    minutes = m; 
    seconds = s; 
    TimeCounter[0] = hours; 
    TimeCounter[1] = minutes; 
    TimeCounter[2] = seconds; 
    String timeOfDay = "am"; 

    for (hours = 0; hours < 25; hours++){ 
     TimeCounter[0] = hours; 
     if (hours == 12){ 
      timeOfDay = "pm"; 
     } 
     System.out.println(TimeCounter[0] + " : " + TimeCounter[1] + " : " + TimeCounter[2] + " " + timeOfDay); 
     if (hours == 24){ 
      reset(TimeCounter); 
      break; 
     }else{ 
      for (int minutes = 0; minutes < 61; minutes++){ 
       TimeCounter[1] = minutes; 
       System.out.println(TimeCounter[0] + " : " + TimeCounter[1] + " : " + TimeCounter[2] + " " + timeOfDay); 
       } 
       if (minutes == 60){ 
        minutes = 0; 
        break; 
       }else{ 
        for (seconds = 0; seconds < 61; seconds++){ 
         TimeCounter[2] = seconds; 
         System.out.println(TimeCounter[0] + " : " + TimeCounter[1] + " : " + TimeCounter[2] + " " + timeOfDay); 
         if (seconds == 60){ 
          seconds = 0; 
          break; 
         } 
        } 
       } 
      } 
     } 

} 

//End of day 
public static void reset(int [] midNight){ 
    TimeCounter[0] = 0; 
    TimeCounter[1] = 0; 
    TimeCounter[2] = 0; 
} 

public static void main(String[] args){ 
    run(0, 0, 1); 
} 

}

+0

如果有人想要這個12小時版本的代碼,只是評論這篇文章,我會發布它 –

+0

我不知道你的輸出應該顯示,但你的看起來可能會關閉。你確定這段代碼是正確的嗎?什麼是具體的任務要求,輸出應該是什麼樣子?我的意思是,我的程序類型的一個例子已作爲我的答案附錄發佈。 –

+0

是的,我得到了一點幫助,它開始工作。我認爲這是一個不同的版本,因爲其中一個版本的第二個計數器出現故障 –