我的代码由两个类组成。(1.测试((2。狗(
该代码的目的是测试制作3只狗,并使用setter设置狗的名称和大小,然后让3只狗吠叫。
这是我的密码。
public class Dog {
private int size;
public void bark(){
System.out.println("Size: " + size);
if(size > 19) System.out.println("Woof Woof Woof");
if(size > 9 && size < 20) System.out.println("Bark Bark Bark");
if(size < 10 && size > 0) System.out.println("Yip Yip Yip");
if(size == 0) System.out.println("Size Not Set");
}
public void setSize (int s){
if(size > 0 && size < 60) size = s;
if(size > 60) {
size = 60;
System.out.println("Debug: Size sent to large resetting to max.(60)");
}
}
public class Test{
public static void main (String[] args){
//dog size
int s1 = 100;
int s2 = 100;
int s3 = 100;
//create dog and make him bark
Dog d1 = new Dog();
d1.setSize(s1);
d1.bark();
//create dog and make him bark
Dog d2 = new Dog();
d2.setSize(s2);
d2.bark();
//create dog and make him bark
Dog d3 = new Dog();
d3.setSize(s3);
d3.bark();
}}
这是输出
Size: 0
Size Not Set
Size: 0
Size Not Set
Size: 0
Size Not Set
我认为当Dog
运行setSize
时,它不是在将size
切换到传递的参数?如果是,我该如何解决?
当我将private int size;
更改为private int size = 10;
时,它起作用。但是,当我将其更改为private int size = 0;
时,它不会。
为什么会这样?
您的setter逻辑不正确:
if(size > 0 && size < 60) size = s;
if(size > 60) {
size = 60;
默认情况下,大小初始化为零,因此调用setter不起作用,因为从未检查过该条件!
您需要检查参数s,而不是字段size!
将尺寸setter
更改为
public void setSize (int size){
if(size > 0 && size < 60) this.size = size;
if(size > 60) {
this.size = 60;
System.out.println("Debug: Size sent to large resetting to max.(60)");
}
}
检查size
的值没有意义,因为它还没有设置
更改size > 60
;至s>60