2017-02-16 18 views
0

我正在使用驅動程序類來創建另一個類的對象。當我輸入寵物重量或整數時,數字會變爲0.0。所有的權重變量都聲明爲double,所以我不知道它爲什麼這樣做。爲什麼當我輸入一個整數時,我的Java雙變量類型出現到0.0?

import java.util.Scanner; 

    public class PetAssignment { 

     public static void main(String[] args) 
     { 
      String nameAndType; 
      int yrs; 
      double lbs; 

      //Scanner object for the keyboard input 
      Scanner answers = new Scanner(System.in); 

      //Pet objects used for calling accessor methods 
      Pet petName = new Pet(); 
      Pet petType = new Pet(); 
      Pet petAge = new Pet(); 
      Pet petWeight = new Pet(); 

      //A bunch of other code and pet attributes 

      //Input for the weight of pet 
      System.out.print("How many pounds does your pet weight? "); 
      lbs = answers.nextDouble(); 
      petName.setWeight(lbs); 

      //Print out of the user's answers 
      System.out.println(""); 
      System.out.println("You have a "+ petType.getType() + ". That is named " 
       + petName.getName()+ " and is " 
       + petAge.getAge() + " years old and weighs " 
       + petWeight.getWeight() + " lbs.");   
     } 
    } 

這裏是我的寵物類

public class Pet 
    { 
     private String name; 
     private String type; 
     private int age; 
     private double weight;  
     /* 
     * a bunch of other code 
     */ 
     public void setWeight(double petWeight) 
     { 
      weight = petWeight; 
     } 
     /* 
     * a bunch of other code 
     */ 
     public double getWeight() 
     { 
      return weight; 
     } 
    } 
+1

你爲什麼要爲每個屬性使用一個新的'Pet'實例?他們都是一樣的寵物,不是嗎?您將在'petName'實例上設置權重值,並將其從'petWeight'實例中寫出。只需創建一個「Pet」並使用它來設置/獲取所有屬性。 –

+2

請發送您的setWeight(double w)方法。 –

+0

太多實例而不是1個。和'petWeight.getWeight()'將有一個默認值「0.0」,因爲你沒有在它的實例對象上設置一個值。 – msagala25

回答

2

錯了是你使用這個代碼設定值

petName.setWeight(lbs); 

,並使用這個檢索值

Pet petWeight = new Pet(); 

他們您必須使用相同的對象2 2個不同的對象報表設置,檢索 通過放

petWeight.setWeight(lbs); 

代替

petName.setWeight(lbs); 

會解決它

2

這個問題的第一個重要的事情是,你只需要在類「寵物」的一個實例。一隻寵物可以容納你需要的所有變量。 例如:

Pet pet = new Pet(); 
System.out.print("How many pounds does your pet weight? "); 
lbs = answers.nextDouble(); 
petName.setWeight(lbs); 

System.out.println(""); 
     System.out.println("You have a "+ pet.getType() + ". That is named " 
      + pet.getName()+ " and is " 
      + pet.getAge() + " years old and weighs " 
      + pet.getWeight() + " lbs."); 

你寫它實質上創建4個不同的容器時,你只需要一個方式。您將權重分配給petWeight容器,但隨後試圖從petName容器中獲取權重,導致您檢索錯誤的變量。在這種情況下,只有一個容器或實例稱爲「寵物」,因此不應發生此問題。

1

如果ageweight沒有預期的格式,我建議檢查返回類型getAge()getWeight。如果不匹配該字段,它將在返回時進行轉換,至少在int->double的情況下(我相信double->int需要轉換)。

但正如已經提到的那樣,添加.0double的預期行爲。如果你不想要它,你可以明確地投到int

1

我看到的問題是您正在創建多個寵物對象,並將寵物重量分配給「petName」對象,但是您試圖將「寵物重量」對象的重量添加到輸出中。 嘗試用以下:

 //Input for the weight of pet 
     System.out.print("How many pounds does your pet weight? "); 
     lbs = answers.nextDouble(); 
     petWeight.setWeight(lbs); 

     //Print out of the user's answers 
     System.out.println(""); 
     System.out.println("You have a "+ petType.getType() + ". That is named " 
      + petName.getName()+ " and is " 
      + petAge.getAge() + " years old and weighs " 
      + petWeight.getWeight() + " lbs.");   
    } 
} 

另外,我建議只使用一個對象的「寵物」和每一個值賦給一個,以及使用上的System.out只有一個

1

問題是,在第34行,檢查你在這裏做什麼

petName.setWeight(lbs); 

但是當你顯示輸出

System.out.println("You have a "+ petType.getType() + ". That is named " 
      + petName.getName()+ " and is " 
      + petAge.getAge() + " years old and weighs " 
      + petWeight.getWeight() + " lbs."); 

你看到了嗎?你是顯示petWeight了」 wieight但掃描儀設置petName對象,請調試和檢驗這一點。

System.out.print("How many pounds does your pet weight? "); 
lbs = answers.nextDouble(); 
petWeight.setWeight(lbs); 

,其結果是

You have a null. That is named null and is 0 years old and weighs 1.5 lbs. 

中courst其他屬性都爲空。

我希望這個有用。關心!

0

你做錯了在設置和獲取你的寵物的重量。您需要使用相同的對象來設置和獲取價值。您正在設置您的寵物體重爲petName對象並從petWeight獲取對象。這就是爲什麼你得到0.0這是默認值double。爲了解決你的問題 使用相同的對象來設置和獲得你的寵物的體重。

例子:

petWeight.setWeight(lbs); //setting the value in petWight object 
petWeight.getWeight(); // it will returns the same value that you set. 
1

感謝大家的幫助。我覺得自己有這樣一個簡單的錯誤是一個白癡。我還簡化了我的代碼只有一個寵物類的實例。

import java.util.Scanner; 

    public class PetAssignment { 

     public static void main(String[] args) 
     { 
      String nameAndType; 
      int yrs; 
      double lbs; 

      //Scanner object for the keyboard input 
      Scanner answers = new Scanner(System.in); 

      //Pet objects used for calling accessor methods 
      Pet pet = new Pet(); 

      //A bunch of other code and pet attributes 

      //Input for the weight of pet 
      System.out.print("How many pounds does your pet weight? "); 
      lbs = answers.nextDouble(); 
      pet.setWeight(lbs); 

      //Print out of the user's answers 
      System.out.println(""); 
      System.out.println("You have a "+ pet.getType() + ". That is named " 
       + pet.getName()+ " and is " 
       + pet.getAge() + " years old and weighs " 
       + pet.getWeight() + " lbs.");   
     } 
    } 
相關問題