2014-01-17 63 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

提示:看看你的构造函数 - “公共CounterTester(int i)'你应该如何处理这个值'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 String getCount() { 
    // return the count variable 
    return Integer.toString(this.count); 
} 

你应该这样做:

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

最后,这些方法似乎是你可能想在其他类调用的那种,所以我建议你做所有这些方法public而不是private

+0

看起来像一个家庭作业。不确定提供整个解决方案是否是个好主意。你可以提供一些提示。你的'getCount()'方法不会被编译。 –

+0

@邹邹对。起初没有注意到回报。感谢您指出了这一点。另外我认为一般来说你是对的,但是Diana Magers在这方面非常新颖,我认为向她展示如何用Java获取和操作数据可能是最好的帮助方式。 –

0

添加新的答案以反映更新的问题。

随着您的代码现在,有几个问题。

第一个问题是你的变量myCount是静态的。它不应该。现在,我怀疑你让它变成静态的原因是因为你试图在静态主方法中访问它,这导致了错误,然后你的IDE(我猜它是eclipse)建议你让变量static来修复错误。

您需要了解静态和非静态变量和方法之间的区别。

如果一个变量是静态的,这意味着它属于类本身,并且可以从类名访问。如果一个变量是非静态的,那么它属于该类的一个实例,并且必须从该类的一个实例中访问。所以,与其让我的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; 
} 

务必做同样的事情为您减少方法。

第三个问题是你的构造无ARGS不赋值给myCount,但你假设它分配一个值1。如果这是你想要的东西,然后在你的构造不只是ARGS去myCount = 1;

第四个问题是你递增1 myCount当你通过它,它由1抛出你的答案关闭所以不这样做:

counter.increase(counter.myCount++); 

只是这样做:

counter.increase(counter.myCount); 

第五个问题是,你是一个新的计数器(10),然后就期望其计数为0。也许我不正确地理解你的意图是什么?计数应该是10,而不是0,所以我认为你的期望值应该改变。

第六个问题是,你似乎期待一个无参数的减少方法,以某种方式减少数量与上次增加的数量相同。如果你希望你的代码以这种方式行事,你将不得不创建另一个变量来存储最后的增加量。

第七个问题是你在传递myCount作为参数来增加myCount。当你多次这样做时,你并没有增加myCount的价值 - 事实上,通过加倍,你实际上正在以指数方式增加它。但是当你第二次执行代码时,对你的代码的评论意味着你只是试图增加1。也许你应该传递一个int文本(counter.increase(1))而不是变量本身(counter.increase(counter.myCount))。