2014-01-17 2 views
2

좋아요,이 프로그램 CounterTester.java가 다운되었지만 출력물에 프로그램이 원하는 방식으로 늘어나고 있지만 방식이 줄지 않습니다. 그것을 원한다.CounterTester.java 출력이 정확하지만 정확히 감소하지 않습니다

아무쪼록 잘 부탁드립니다.

/** 
* This program is used to test the Counter class. It constructs the a counter 
* using both constructors provided by the Counter class. 
* 
*/ 
public class CounterTester 
{ 
    static int myCount; 

    public CounterTester() { 
     int init = 1; 
     myCount = init; 
    } 

    public CounterTester(int i) { 

    } 


    public static void main(String[] args) 
    { 

     CounterTester counter = new CounterTester(); //create a new counter with a step value of 1 

     counter.increase(myCount); //add 1 
     System.out.println("Expected Count: 1 -----> Actual Count: " + counter.getCount()); 

     counter.increase(myCount++); //add 1 
     System.out.println("Expected Count: 2 -----> Actual Count: " + counter.getCount()); 

     counter.decrease(); //subtract 1 
     System.out.println("Expected Count: 1 -----> Actual Count: " + counter.getCount()); 


     counter = new CounterTester(10); //create a new counter with a step value of 10 
     System.out.println("Expected Count: 0 -----> Actual Count: " + counter.getCount()); 

     counter.increase(myCount++); //add 10 
     System.out.println("Expected Count: 10 ----> Actual Count: " + counter.getCount()); 

     counter.decrease(); //subtract 10 
     System.out.println("Expected Count: 0 -----> Actual Count: " + counter.getCount()); 

     counter.decrease(); //subtract 10 
     System.out.println("Expected Count: -10 -----> Actual Count: " + counter.getCount()); 

    } 

    private String getCount() { 
     return ""+myCount; 
    } 

    private void decrease() { 
     myCount--; 

    } 

    private void increase(int i) { 
     myCount++; 

    } 

    public void reset() { 

    } 
} 

감사합니다.

+0

힌트 : 생성자를보세요.'public CounterTester (int i)'이 값으로 무엇을해야합니까? –

+1

당신의 과제는 '// TODO'라고 쓰여진 공란을 채우는 것입니다. (카운트를 추적하기위한 필드가 필요합니다). 'return null'은 일시적이며, 단지'NULL'을 출력 할 것이기 때문에 무언가에 의해 대체되어야합니다. – zapl

+0

zapl - // TODO 영역에서 계산을 사용해야합니까? 나는 일종의 우둔한 사람이다. 나는 확실히 초보자이다. –

답변

0

getCount() 방법에서 null을 반환하기 때문에 이러한 방법의

private String getCount() { 
    // TODO Auto-generated method stub 
    return null; 
} 

없음/생성자는

2

를 예상 당신이 기대하는 것처럼 조금 보이는대로 동작하지 않도록 실제 구현이 없습니다 당신의 메서드 이름 때문에 단순히 원하는대로 동작하도록 코드를 작성합니다. 그것은 작동하지 않습니다; 실제로 값을 저장하고 조작하는 코드에 일부 논리를 구현해야합니다. 여기에 한 가지 방법이 있습니다 :

변수에 카운트 수를 저장하십시오.

private int count; 

생성자로 변수를 인스턴스화하십시오.

public CounterTester(int i) { 
    this.count = i; 
} 

변수를 조작하거나 검색하기 위해 다음과 같은 방법으로 몇 가지 기본 논리를 추가 : 또한

private String getCount() { 
    // return the count variable 
    return Integer.toString(this.count); 
} 

private void decrease() { 
    // decrease the count by 1 
    this.count--; 

} 

private void increase() { 
    // increase the count by 1 
    this.count++; 

} 

public void reset() { 
    // reset the count to 1 
    this.count = 1; 

} 

, 단지 메모를 당신의 getCount() 방법에. 지금은 String 유형의 값을 반환하도록 선언 했으므로 카운트 값을 Integer.toString(this.count).으로 문자열로 변환해야합니다. getCount() 메소드가 int를 반환하는 것이 더 간단 할 것입니다. 그래서 대신의 :

private int getCount() { 
    // return the count variable 
    return this.count; 
} 

마지막으로,이 방법은 다른 클래스에서 호출 할 수있는 일종처럼 보이는, 그래서 나는 이러한 모든 방법을 권하고 싶습니다 :

private String getCount() { 
    // return the count variable 
    return Integer.toString(this.count); 
} 

이 작업을 수행해야 private 대신 public입니다.

+0

숙제와 같이 보입니다. 전체 솔루션을 제공하는 것이 좋은지 잘 모르겠습니다. 대신에 힌트를 줄 수 있습니다. 그리고 당신의'getCount()'메소드는 컴파일되지 않습니다. –

+0

@ZouZou Right. 처음에는 수익을 인식하지 못했습니다. 그 점을 지적 해 주셔서 감사합니다. 또한 나는 일반적으로 당신이 옳다고 생각합니다. 그러나 Diana Magers는 매우 새롭습니다. Java에서 데이터를 검색하고 조작하는 방법이 도움이 될 수있는 최선의 방법 일 수 있다고 생각합니다. –

0

업데이트 된 질문을 반영하여이 새로운 대답을 추가하십시오.

코드가 현재 의미하는 것처럼 몇 가지 문제가 있습니다.

첫 번째 문제은 변수가 myCount 인 것으로 나타났습니다. 그것은해서는 안됩니다. 이제 정적 인 이유를 의심해 봅니다. 오류를 일으키는 정적 메인 메서드에서 액세스하려고 했으므로 IDE에서 변수를 정적으로 수정하도록 제안했습니다 (이클립스라고 생각합니다). 오류.

정적 변수와 비 정적 변수 및 메서드의 차이점을 이해해야합니다.

변수가 정적 인 경우 클래스 자체에 속하며 클래스 이름에서 액세스 할 수 있습니다.변수가 정적이 아닌 변수는 해당 클래스의 인스턴스에 속하며 클래스의 인스턴스에서 액세스해야합니다. 그래서, 대신 내 myCount 정적을 만드는, 클래스의 인스턴스 떨어져 static 수정 및 액세스 myCount을 제거 :

// create a new counter (an instance of CounterTester) with a step value of 1 
CounterTester counter = new CounterTester(); 

// use counter.myCount instead of just myCount 
counter.increase(counter.myCount); 

당신이 myCount 정적 만들었을 때, 그 결과는 모든 새 CounterTesters이 같은 수를 공유했다 당신이 new CounterTester(10)을 만들 때 그래서 그 수는 여전히 3

두 번째 문제했다 당신이 증가 또는 당신의 단계를 감소 할 금액을 지정하려는 것 같다,하지만 방법이 제대로 구현되지 않은 것입니다.

private void increase(int i) { 
    // increment by 1 
    myCount++; 
} 

그러나해야한다이다 : 증가 방법은 현재

private void increase(int i) { 
    // increment by i 
    myCount += i; 
} 

것은 당신의 감소 방법에 대해 같은 일을해야합니다.

세 번째 문제는 인수가없는 생성자가 myCount에 값을 할당하지 않는다는 것입니다,하지만 당신은 만약 당신이 원하는 경우는 인수없이 생성자에서 다음, 1의 값을 할당한다고 가정 단지 go myCount = 1;.

네 번째 문제 당신이 그래서 이렇게하지 당신이 1만큼 답을 던지는,의를 통과 할 때 1 myCount를 증가한다는 것이다 :

counter.increase(counter.myCount++); 

그냥 이렇게 :

counter.increase(counter.myCount); 

다섯 번째 문제는 새로운 카운터 (10)를 제작하고 그 카운트가 0이 아마도 내가 제대로 당신의 의도를 이해하지 못하는 것으로 기대하고 있다는 것입니다? 개수는 0이 아닌 10이어야합니다. 그래서 당신의 기대가 여기에서 바뀌어야한다고 생각합니다.

여섯 번째 문제은 마지막으로 증가 된 것과 동일한 금액으로 어떻게 든 카운트를 줄이려면 no-args 감소 방법을 기대하고있는 것 같습니다. 코드가 이러한 방식으로 작동하도록하려면 마지막 증가량을 저장하기 위해 다른 변수를 만들어야합니다.

제 7의 문제myCount을 인수로 사용하여 myCount을 전달하는 것입니다. 이 작업을 여러 번 수행하면 myCount의 값이 증가하지 않습니다. 사실이 값을 두 배로 늘리면 기하 급수적으로 증가합니다. 하지만 두 번째로 할 때 코드에 대한 주석은 단지 1 씩 증가 시키려고한다는 것을 의미합니다. 변수 자체 (counter.increase(counter.myCount)) 대신 int 리터럴 (counter.increase(1))을 전달해야합니다.

관련 문제