2017-11-19 11 views
0

우선, 내가 아는 this 질문을 읽었습니다. 제가 알고있는 것과 같은 근본적인 문제를 다루고 있습니다.Java에서 다른 생성자를 호출하는 방법은 무엇입니까? (초보자 용 예)

그럼에도 불구하고 나는 내 자신의 특정 문제에 대한 해결책을 적용 할 수 없습니다.

다음 예제에서는 몇 가지 오버로드 된 Clock 생성자가 있습니다. 오류는 문자열 입력에서 Clock을 만들려고 할 때 발생합니다.

누구나 생성자 호출의 올바른 구현을위한 조언이 있습니까?

코드 :

public class Clock 
    { 
     public static void main(String[] args) 
     { 

      Clock testClock = new Clock(153, 26); 
      System.out.println("Input: Clock(153, 26)"); 
      System.out.println(testClock.toString()); 

      Clock testClock2 = new Clock(9000); 
      System.out.println("Input: Clock(9000)"); 
      System.out.println(testClock2.toString()); 


      Clock testClock3 = new Clock(23:59); 
      System.out.println("Input: Clock(23:59)"); 
      System.out.println(testClock3.toString()); 

      System.out.println("Input: testClock2.add(20)"); 
      System.out.println(testClock2.add(20));    

      System.out.println("input: testClock.add(testClock2)"); 
      System.out.println(testClock.add(testClock2).toString()); 

     } 

     // Constructors 

     public Clock(int min, int h) 
     { 
      this.min += min%60; 
      h += min/60; 
      this.h += h%24; 
     } 

     public Clock(int min) 
     { 
      this.min += min%60; 
      this.h += (min/60)%24; 
     } 



     public Clock (String theTime) 
     { 
      int minutes = Integer.parseInt(theTime.substring(0,1)); 
      int hours = Integer.parseInt(theTime.substring(3,4)); 

      Clock stringClock = new Clock(minutes, hours); 
      return stringClock; //error occurs ********************* 

     } 



     private int h;  
     private int min; 

     public int getMin() { 
     return min; 
     } 
     public int getH() { 
     return h; 
     } 

     public Clock add(int min) 
     { 
      int newMin = this.min + min; 
      int newH = this.h; 

      Clock newClock = new Clock(newMin, newH); 
      return newClock; 
     } 

     public Clock add(Clock c) 
     { 
      int newMin = this.min + c.min; 
      int newH = this.h + c.h; 

      Clock newClock = new Clock(newMin, newH); 
      return newClock; 
     } 

     public String toString() 
     { 

      String theTime = ""; 

      if (this.h < 10) 
      { 
       theTime += "0" + this.h; 
      } 
      else 
      { 
       theTime += this.h; 
      } 

      theTime += ":"; 

      if (this.min < 10) 
      { 
       theTime += "0" + this.min; 
      } 
      else 
      { 
       theTime += this.min; 
      } 

      return theTime; 
     } 
    } 
+0

당신이 다른 질문에서 제안 된 솔루션를 시도하는 데 도움이

public Clock (String theTime) { this(Integer.parseInt(theTime.split(":")[1], Integer.parseInt(theTime.split(":")[0]); } 

희망 살펴보세요? 대신'this (minutes, hours)'를 사용하면 생성자가 객체를 반환하지 않습니다. – NickL

+1

당신은 생성자에서 반환하지 않습니다. –

+0

오류가 있습니까? 그렇다면 어디에서? – notyou

답변

2

당신은 this를 호출 할 수 있지만 같은 첫 번째 문이어야한다 :

public static Clock parseHHMM(String theTime) 
    { 
     int hh = Integer.parseInt(theTime.substring(0,1)); 
     int mm = Integer.parseInt(theTime.substring(3,4)); 
     return new Clock(hh, mm); 

    } 

:

public Clock (String theTime) 
    { 
     this(
      Integer.parseInt(theTime.substring(0,1)), 
      Integer.parseInt(theTime.substring(3,4)) 
     ); 

    } 

가 또는 정적 팩토리 메소드를 사용할 수 있습니다 나는 후자를 선호한다. 그것은 자바의 일반적인 접근법이다. here.

2

그 라인에 문제도있다 : 당신이 인수가 문자열로 취급하려면

Clock testClock3 = new Clock(23:59); 

, 당신은 다음과 같이 따옴표와 함께 인수로 전달 된 값을 포위한다 :

Clock testClock3 = new Clock("23:59"); 

, 전달 된 매개 변수의 모양을 변경하지 않으면 컴파일되지 않습니다.

0

세미콜론 ":"에서 theTime을 분리하여 두 개의 정수 배열을 얻을 수 있습니다. 첫 번째는시, 두 번째는 분입니다. 이