【问题标题】:Why is my Java double variable type coming out to 0.0 when I put in an integer?当我输入一个整数时,为什么我的 Java 双变量类型会变为 0.0?
【发布时间】:2017-02-16 04:59:48
【问题描述】:

我正在使用驱动程序类来创建另一个类的对象。当我输入宠物重量或整数时,数字为 0.0。所有的权重变量都被声明为 double 所以我不知道它为什么这样做。

  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;
      }
    }

【问题讨论】:

  • 为什么要为每个属性使用一个新的Pet 实例?他们都是同一个宠物,不是吗?您正在为您的 petName 实例设置权重值,并将其从您的 petWeight 实例中写出。只需创建一个Pet 并使用它来设置/获取所有属性。
  • 请发布您的 setWeight(double w) 方法。
  • 实例太多,而不是只有 1 个。并且petWeight.getWeight() 将具有默认值0.0,因为您没有在其实例对象上设置值。

标签: java accessor


【解决方案1】:

错误是您使用此代码设置值

 petName.setWeight(lbs);

并使用它来检索值

 Pet petWeight = new Pet();

它们是 2 个不同的对象您必须在设置、检索中为 2 个语句使用相同的对象 通过放

petWeight.setWeight(lbs);

而不是

petName.setWeight(lbs);

会解决的

【讨论】:

    【解决方案2】:

    这个问题的第一件重要的事情是你只需要一个“Pet”类的实例。一只宠物可以容纳您需要的所有变量。 例如:

    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 容器中获取权重,这导致您检索到错误的变量。在这种情况下,如果只有一个容器或实例称为“pet”,则不应出现此问题。

    【讨论】:

      【解决方案3】:

      如果ageweight 没有预期的格式,我建议检查getAge()getWeight 的返回类型。如果它与该字段不匹配,它将在返回时进行转换,至少在int->double 的情况下(我相信double->int 需要强制转换)。

      但如前所述,添加.0double 的预期行为。如果不想要,可以显式转换为int

      【讨论】:

        【解决方案4】:

        我看到的问题是您正在创建多个 Pet 对象并将宠物重量分配给“petName”对象,但随后您尝试将“petWeight”对象的重量添加到输出中。 尝试以下方法:

                //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 上使用那个对象

        【讨论】:

          【解决方案5】:

          问题在第 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”的重量,但扫描仪正在设置 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. 
          

          当然其他属性都是空的。

          我希望这有用。问候!

          【讨论】:

            【解决方案6】:

            感谢大家的帮助。犯了这么简单的错误,我觉得自己像个白痴。我还用一个宠物类实例简化了我的代码。

            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.");         
                    }
                }
            

            【讨论】:

              【解决方案7】:

              您在设置和获取宠物重量方面做错了。您需要使用相同的对象来设置和获取值。您在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.
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-10-22
                • 1970-01-01
                • 2014-10-07
                • 1970-01-01
                • 2021-08-02
                • 2013-07-01
                • 2016-02-18
                相关资源
                最近更新 更多