2016-10-05 57 views
1

我的代碼由2個類組成。 (1.測試)(2.狗)Java封裝設置程序不改變實例變量

該代碼的目的是測試使3只狗和使用setters設置狗的名稱和大小,然後使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它不chaning size傳遞的參數怎麼想嗎?如果是的話我該如何解決這個問題?

當我更改private int size;private int size = 10;它的工作原理。 但是,當我將其更改爲private int size = 0;它不。

這是爲什麼?

+0

你爲什麼檢查大小? – imoteb

+0

更改尺寸> 60; to s> 60 –

回答

4

您的二傳手邏輯是不正確的:

if(size > 0 && size < 60) size = s; 
    if(size > 60) { 
     size = 60; 

默認大小是初始化爲零,因此調用設置器不能正常工作,因爲條件永遠都無法檢查!

您需要檢查參數s而不是大小

1

更改尺寸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)"); 
    } 
} 

這是沒有意義的檢查,因爲它尚未設置

+0

謝謝!這工作。 –

+0

酷,請upvote和/或接受此答案 –

0

變化size > 60的的size值;到s>60