2011-04-19 11 views
1

처음으로 알고있는 증가분으로 콜백이 잘못되었습니다. 나는 무엇을해야할지 모르겠다. 콜백이 필요한 케이스에 부딪 힐 때 temp를 사용하려면 증분이 필요합니다. 나는 그레이더 테스트 스크립트가 그것을 허용하지 않기 때문에 매개 변수를 전달하기 위해 증가분을 변경할 수 없다. 두 번째 문제는 입력을 증가시키지 않는 것입니다.숫자가 증가하지 않을 것입니다.

public class TestBigNaturalSimple { 

public static void main(String[] args) { 
    BigNatural b1 = new BigNatural(); // default constructor 
    BigNatural b2 = new BigNatural(23); // one-argument int constructor 
    BigNatural b3 = new BigNatural("346"); // one-argument String constructor 
    BigNatural b4 = new BigNatural(b2); // one-argument BigNatural 
             // constructor 

    b1.increment(); 
    b3.decrement(); 

    System.out.println(b1.toString()); // should print out 1 
    System.out.println(b4.toString()); // should print out 23 
} 
} 

내 코드는 다음과 같습니다 :

public class BigNatural { 

private String num; 

public BigNatural(String input) { 
    num = input; 
} 


public BigNatural(BigNatural input) { 
    num = input.toString(); 
} 

public BigNatural(Integer input) { 
    num = input.toString(); 
} 

public BigNatural() { 
    Integer i = 0; 
    num = i.toString(); 
} 

public void increment() { 
    Integer first = 0; 
    Character ch = num.charAt(num.length()-1); 
    Integer last = Character.digit(ch, 10); 

    if (num.length() > 1) 
    { 
     if (last < 9) { 
      last++; 
     } 
     else 
      { 
      if (num.length() >= 2) 
      { 
       last = 0; 
       String temp = new String(num.substring(0, num.length()-2)); 
       increment(); 
      } 
      else 
      { 
       last++; 
      } 
     } 
    } 
    else 
    { 
     if (last < 9) 
     { 
      last++; 
     } 
     else 
     { 
      last = 0; 
      first = 1; 
     } 
    } 

    String t = last.toString(); 


    if (first > 0) 
    { 
    String x = first.toString(); 
    num.concat(x); 
    } 

    num.concat(t); 
} 

public void decrement() { 
    Character ch = num.charAt(num.length()-1); 
    Integer last = Character.digit(ch, 10); 

    if(num.length() > 1) 
    { 
     if(last == 0) 
     { 
      String temp = new String(num.substring(0, num.length()-2)); 
      decrement(); 
     } 
     else 
     { 
     last--; 
     } 
    } 
    else 
    { 
     if(last > 0) 
     { 
      last--; 
     } 
     else 
     { 
      last = 0; 
     } 
    } 

    String t = last.toString(); 
    num.concat(t); 
} 


public String toString() { 
    return num; 
} 
} 

답변

3

을 수있다 예를 들어 당신은 단지 학년에 대한 테스트 스크립트는 다음과 같이 보입니다 그냥 23를 반환 수 (23)에 증가를 호출하는 경우 내가 본 숫자를 증가시키는 가장 복잡한 방법. ;) 나는 당신이 그렇게해야만한다고 생각한다.

내가 볼 수있는 곳에서 num을 변경하지 마십시오. 당신이 디버거를 사용했다면 이것이 분명 할 것으로 기대됩니다. ;)

숫자가 바뀔 것으로 예상되는 경우 num = num.concat(t)을 사용해보세요.

참고 : 문자열은 변경할 수 없으므로 변경할 수 없으며 바꾸기 만 할 수 있습니다.

편집 : 여기에 관심있는 버전이 제공됩니다. 당신의 교수는 당신이 이것을 쓰지 않았 음을 알게 될 것이기 때문에 그것을 복사하지 마십시오. ;)

public void increment() { 
    num = increment(num); 
} 
private static String increment(String s) { 
    if (s.length() <= 0) return "1"; 
    char ch = s.charAt(s.length() - 1); 
    String top = s.substring(0, s.length() - 1); 
    return ch < '9' ? top + ++ch : increment(top) + '0'; 
} 
+0

당신이 그것을 놓칠 때가 긴 밤이었습니다. 잘 우리는 지금 어디인가에 도착하고있다. 내가 겪고있는 유일한 다른 큰 문제는 기본 케이스가> 9 일 때 온도에 대한 증가분을 호출하는 방법입니다. – Bigby

+0

당신은 재진입을 사용하려고하는 것으로 보입니다. 이를 수행하려면 모든 인수를 매개 변수로 전달하고 결과를 리턴해야합니다. 이것이 당신이 성취하려고하는 것입니까? –

+0

예, 원래는 temp.increment()를 사용하여 temp에서 증가분을 호출하지만 곧 작동하지 않는다는 것을 알게되었습니다. – Bigby

1

Java에서는 문자열을 변경할 수 없습니다. 따라서 증분 방법으로 코드

num.concat(t); 

을 얻지 못할 것입니다.

1

첫째, 규칙을 적용 자신에게를 반복하지 않습니다

  • 이 증가하는 것은 감소 1
  • 을 추가하는 것은 추가 -1

는 따라서 단순히 필요하다 쓰기 기능을 숫자로 입력하여 BigNatural에 추가하십시오.

public void increment() { 
    add(1); 
} 

public void decrement() { 
    add(-1); 
} 

private void add(int i) { 
    // Your homework here ... 
    // You will have only one function to debug and correct, not 2 
} 

둘째 : 다른 답변에서 가리킨 것처럼 num.concat(t);은 예상 한대로 수행하지 않으므로 num = num.concat(t);이 필요합니다. 모르는 기능을 사용할 때는 항상 Java 설명서를 참조하십시오. 프로그램을 디버그 할 수있는 편집기가 없다면 다음과 같이하십시오 : Eclipse는 인스턴스이지만 다른 편집기는 학습 도구로서 더 좋을 수 있습니다. 추가 된 이점은 도구가 코드를 형식화하고 많은 실수에 대해 경고한다는 것입니다. ...

+1

+0 : 증가가 수행하는 복잡한 방법을 감안할 때, 이것이 문제라고 생각하지 않습니다. 추가 구현이 도움이 될 것이라고 생각하지 않습니다. ;) –

관련 문제