2012-08-28 4 views
0

이것은 지난 시험 논문의 질문입니다. 이 질문은 새 클래스에 Counter 유형의 변수 c을 선언해야합니다. 그런 다음 Counter의 새 인스턴스에 n 값을 사용하여 초기화해야합니다. 그 다음에 n 필드를 두 번 증가시켜야합니다. 그런 다음 n 필드의 값을 System.out으로 인쇄하십시오.Java - void 메서드를 호출하고 해당 값을 저장합니다.

두 클래스를 모두 수행했지만, Counter2 클래스에 대해서는 잘 모르겠습니다. 나는 Counter 변수를 잘못 선언 할 수 있다고 생각합니다.

public class Counter { 
    private int n; 
    public int x; 

    public Counter(int theN){ 
     this.n=theN; 
    } 

    public int getN(){ 
     return n; 
    } 

    public void inc(){ 
     x = 1+ getN(); 
    } 
} 

public class Counter2{ 
    Counter c; 

    public int incrementTwice(){ 
     int i = 0; 

     while(i<2){ 
      c.inc(); 
      i++; 
     } 
     return c.x; 
    } 

    public static void main (String[] args){ 
     c = new Counter(100); 
     int finalResult = c.getN(); 
     System.out.println(finalResult); 
    } 
} 
+0

@Nambari을 :)처럼 카운터에서 increment()가 보일 것입니다 구현, 그냥 정적 시도했지만 그것은 단지 (100) 내 while 루프 – nsc010

+0

카운터 C = 새로운 카운터에 문제가 추측 인쇄 (100); – akluth

+3

나는 그 질문을 이해하지 못한다. 'Counter2'에서 유용하게 사용할 수있는 모든 것을하기 위해서'Counter '를 실제로 인스턴스화해야합니다.하지만 당신이하려는 일이 명확하지 않습니다. –

답변

3

inc()에서 실제로 n를 증가하지 않습니다에 추가 할 것입니다. x에서 n+1으로 설정하고 있습니다.

그래서, 당신이 n = initialValuex = n + 1을 처음 실행 후 다음

+0

입니다. 질문의 첫 번째 부분은'n '에 1을 더한 결과를 반환하는 공용 메소드'inc'를 작성하라고 요청했습니다. 그래서 나는 100에서 102까지 증가시키기 위해이 방법을 사용해야한다고 생각합니다. – nsc010

+1

그건 당신이하는 일이 아닙니다. – SJuan76

+0

예, 감사합니다.'inc()'메소드를'n = 1+ getN();'으로 변경했습니다. 몇 가지 비틀기를 만들었고 이제는 작동합니다. – nsc010

1
  • 왜 while 루프가? 왜 두 줄로 늘리지 않는 것이 좋을까요? 내 의견으로는 더 명확해질 것입니다.
  • 개인적으로 나는 귀하의 inc 메소드에서 getN()을 사용하지 않을 것입니다. 이것은 클래스에 대한 공용 인터페이스입니다. 나는 n 변수에 직접 접근 할 것이다. 예를 들어 x = 1 + n;

  • x 및 n을 사용하지 않아도됩니다. 그냥 n을 늘리십시오. 항상 변경되지 않는 값 (n)을 늘리면 문제가 발생할 수 있습니다. 두 번 증분하려면 n에 재 할당해야합니다.

난 그냥

n+=2 

두 N

2
public static void main (String[] args){ 

    c = new Counter(100); 

    int finalResult = c.getN(); 
    System.out.println(finalResult); 
} 

나는를 기대 당신이, 당신이 n = initial Valuex=0이있을 것이다 처음 실행하기 전에, inc을 실행 횟수는 중요하지 않습니다

1) Set c.N = 100; 
2) set finalResult = c.X (100) 
3) Print finalResult (100) 
0,123,516 : 출력 할 100

호출 스택은 다음이 될 것입니다

incrementTwice으로 전화하지 마십시오. "

public static void main (String[] args){ 
    Counter2 counter2 = new Counter2(); 
    counter2.c.n = 100; 
    counter2.incrementTwice(); 
    int finalResult = counter2.c.getN(); 
    System.out.println(finalResult); 
} 

열쇠는 inc() 당신이 x에 추가하고 n에 추가하지 그래서 당신은 x

1

가정 n 카운터의 값 반환해야한다는 것입니다 : 기본은 다음과 같아야 카운터 유형의 변수 c를 선언하고 "새 인스턴스에 초기화 ... 100 값 가져 오기"는 Counter c = new Counter(100);과 같이 수행됩니다. 두 번 그 가치를 증가하면이처럼 간단 할 것이다 :

int value = c.getValue(); 
value++; 
value++; 
c.setValue(value); 

... getValue()이 카운터의 변수를 얻는 방법으로 정의되어 있다고 가정.

그래서이로 함께 간단 모두되어 퍼팅 :

public class MyClass { 
    private Counter c; 

    public MyClass() { 
     c = new Counter(100); 
    } 

    public void increment() { 
     int value = c.getValue(); 
     value++; 
     c.setValue(value); 
    } 

    public void printCounterValue() { 
     System.out.println(c.getValue()); 
    } 

    public static void main(String[] args) { 
     MyClass instance = new MyClass(); // creates new class with Counter c initialized to 100 
     instance.increment(); // increment once 
     instance.increment(); // increment twice 
     instance.printCounterValue(); // print to screen 
    } 
} 

은 물론이 더 간단하게 할 수있다 - 증가 할 수 단순히 n++을 수행 increment()라는 Counter 클래스의 메소드를 만드는 것처럼 간단 할 수 예를 들어, - 이것은 솔루션의 기본 구현입니다.

(이

public void increment() { 
    n++; // equivalent to n = n+1 or n+= 1 
} 
관련 문제