为了账号安全,请及时绑定邮箱和手机立即绑定

如何从对象列表中找到最小的变量?(Java)

如何从对象列表中找到最小的变量?(Java)

呼如林 2023-03-09 17:13:23
该代码未显示任何错误。但是,我得到了意外的输出。我应该得到最小的年龄数字,但我一直得到的是最后输入的年龄值。你能帮我指出这段代码中的错误吗?也许getYoungestPet()方法中存在一些逻辑错误?package pet;public class Pet {    public static String petName;     public static int petAge, petWeight;    int youngestAge=9999;    static int test;    public static String setPetName()    {      return petName;    }    public int setPetAge()    {        return petAge;    }    public int setPetWeight()    {        return petWeight;    }    public int getYoungestPet() //probably an error here..?    {        if (petAge<youngestAge)            youngestAge=petAge;        return youngestAge;    }}package pet;import java.util.Scanner;public class PetMain extends Pet{    public static void main(String[] args)    {    System.out.println("How many pets do you want to enter? " );     Scanner data= new Scanner(System.in);    int petNumber=data.nextInt();    for (int i = 1;i<=petNumber; i++)    {    Pet PetObject = new Pet();     System.out.println("Please enter name for Pet " + i );       Scanner input = new Scanner(System.in);       petName= input.next();            System.out.println("Your pet's name is : " + petName);    System.out.println(" ");    System.out.println("Please enter " + petName + "'s Age" );       petAge= input.nextInt();        System.out.println("Your pet's age is : " + petAge);    System.out.println(" ");    System.out.println("Please enter " + petName + "'s Weight" );        petWeight= input.nextInt();    System.out.println("Your pet's weight is : " + petWeight);    System.out.println(" ");                        System.out.println(PetObject.getYoungestPet());    }}}该代码应该显示最小的年龄,但它显示的是最新输入的年龄。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

你应该声明youngestAge为静态变量。这样所有的都petObject可以共享相同的值。


static int youngestAge=9999;

你的 setter 和 getter 方法也不合适。


public static String setPetName()

{

  return petName;

}

应该:


public static void setPetName(String name)

{

  petName=name;

}

也不要忘记从 main 方法中设置值PetObject。


...

petName= input.next(); 

PetObject.setPetName(petName);

...


查看完整回答
反对 回复 2023-03-09
?
DIEA

TA贡献1820条经验 获得超2个赞

这段代码有很多问题。

但是为了直接回答你的问题,想一想如果每次 for 循环运行时它都重新创建宠物对象,那么这个程序中可能有多少宠物对象,因为它在 for 循环内。但是,简单地将它移到 for 循环之外将无济于事,因为那样的话,每次运行 for 循环时,您都会不断地重置同一个 pet 对象的值。考虑制作一系列宠物物品。

此外,您的代码实际上从未访问过宠物对象实例变量

此外,正如其他人指出的那样,您使用 static 还存在其他问题。干杯。


查看完整回答
反对 回复 2023-03-09
?
HUX布斯

TA贡献1876条经验 获得超6个赞

每次创建Pet时,您都会为该对象获得一个不同的youngestAge ,其值为 9999。因此,每次它都会将最新的petAge与 9999 进行比较,并在您输入的petAge小于 9999时为您提供最新的petAge 。


如果需要存储最小年龄,则将其保存在静态字段中。因为,保留一个额外的字段来存储所有对象的最小年龄对于内存来说是多余的。


如果您希望使用现有设计获得所需的输出,请执行以下操作:


使youngestAge静态化:


static int youngestAge=9999;

并且也不要忘记使该方法也成为静态的。不再需要使其成为对象属性,它使用的字段变量都是静态的。


public static int getYoungestPet()

{

    if (petAge<youngestAge)

        youngestAge=petAge;

    return youngestAge;

}


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信