2016-11-18 71 views
0

我真的是新的編程,我正在爲學校的java作業,我知道我得到了大部分的我寫錯了代碼,但這是我第一次嘗試這樣的事情。獲取「在線程中的異常」主「java.lang.StackOverflowError」和很多錯誤

我想麻煩拍攝,但我得到的錯誤

異常線程 「main」 java.lang.StackOverflowError的

在a07.Time。(Time.java:27)

在a07.Time。(Time.java:27)

在a07.Time。(Time.java:27)

這會持續相當長的一段時間。

我希望有人能告訴我問題的原因,所以我可以開始修復。

Public class Time { 

     private int hour; 
     private int minute; 
     public static final int MIN_HOUR = 0; 
     public static final int MIN_MINS = 0; 

     public Time(int hours, int mins) { 
      minute = mins; 
      hour = hours; 
      Time t = new Time(hour, minute); 
      t.fixME(); 
     } 

     private void fixME() { 
      int minEx = minute/60; 
      int minLeft = minute % 60; 
      int newHour = hour + minEx; 

      minute = minLeft; 
      hour = newHour; 

     if (minute < MIN_MINS) { 
      int subHour = hour - 1; 
      int minNew = minute + 60; 
      hour = subHour % 24; 
      minute = minNew; 

      if (hour < MIN_HOUR) { 
       int hourUp = hour + 24; 
       hour = hourUp; 
      } 
     } 
    } 

    public int getHour() { 
     return hour; 
    } 

    public int getMinute() { 
     return minute; 
    } 

    public Time addMinutes(int mins) { 
     int newMinute = minute + mins; 
     minute = newMinute; 
     Time g = new Time(hour, mins); 
     return g; 

    } 

    public void print() { 
     if (hour == 0) { 
      System.out.printf("12:" + "%02f", minute + " AM"); 
     } 
     if (hour != 0 && hour < 10) { 
      System.out.printf("0" + hour + ":" + "%02f", minute + " AM"); 
     } 
     if (hour >= 10 && hour < 12) { 
      System.out.printf(hour + ":" + "%02f", minute + " AM"); 
     } 
     if (hour >= 12) { 
      int pmHour = hour - 12; 
      if (pmHour == 0) { 
       System.out.printf("12:" + "%02f", minute + " PM"); 
      } else if (pmHour < 12) { 
       System.out.printf(pmHour + ":" + "%02f", minute + " PM"); 
      } 

     } 

    } 
} 

對不起,它的格式不是很好。 任何想法? 謝謝。

+2

不要在你的構造做這個'時刻t5 =新時間(小時,分鐘);' –

回答

2

的問題是在構造函數:

public Time(int hours, int mins) { 
    minute = mins; 
    hour = hours; 
    Time t = new Time(hour, minute); 
    t.fixME(); 
} 

你與線Time t = new Time(hour, minute)再次調用構造函數,所以你停留在一個無限遞歸循環,你保持了一遍又一遍調用函數直到你的堆棧溢出。你並不需要這條線;你可以做到以下幾點:

public Time(int hours, int mins) { 
    minute = mins; 
    hour = hours; 
    fixME(); 
} 

我不認爲你完全理解對象和構造器如何工作,雖然,你應該嘗試通過這個打算:https://docs.oracle.com/javase/tutorial/java/javaOO/

相關問題