2013-11-29 1 views
0

Я делаю 24-часовой. У меня есть код ниже. Моя проблема в том, что время int[] равно [0, 0, 0] и распечатывает его на каждой итерации.
Дополнительная информация, которая может вам помочь. У меня есть Array TimeCounter как [hours, minutes, seconds]. Методы сброса устанавливают выбранные значения int равными нулю, остаются неизменными или увеличиваются на единицу. Вложенные петли для прохождения часов.Я делаю 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. Многие приведенные примеры имеют только «основной» метод. –

ответ

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

спасибо за ответ на мой вопрос, но я получил его сегодня утром, выполняя цикл. Я разместил его ниже, если вы хотите его увидеть. –

0

Что я сделал изменения While-цикл в для цикла с использованием почти точно такой же код. Я также добавил нечто вроде «утра» и «вечера»

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

Да, я мало помог, и он начал работать. Я думаю, что это другая версия, потому что одна из версий имела неисправный второй счетчик –

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