2016-11-18 51 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/

相关问题