首页 > 解决方案 > 不能从静态上下文引用非静态变量“youngestAge”。任何帮助表示赞赏!:)

问题描述

我想找到x数量的宠物中输入的最小年龄。我试过把'public static int youngestAge';但是,这只是让我获得了变量“youngestAge”的最新分配值。我认为这是因为关键字“静态”;所以,我尝试删除它,但这只会导致 netbeans 告诉我 'Non-static variable cannot be referenced from a static context' 。我期望代码给出最低输入年龄。

package pet;
import java.util.Scanner;
public class Pet 
{
    public static String petName; 
    public static int petAge, petWeight;
    public int youngestAge; 


    public static String setPetName()
    {
       Scanner input = new Scanner(System.in);
       petName= input.next();
       return petName;
    }

    public int setPetAge()
    {
        Scanner input = new Scanner(System.in);
        petAge= input.nextInt();
        return petAge;
    }

    public int setPetWeight()
    {
        Scanner input = new Scanner(System.in);
        petWeight= input.nextInt();
        return petWeight;
    }


    public void getYoungestPet()
    {
        if (youngestAge<petAge)
            youngestAge=petAge;
        System.out.println("The youngest age is " + 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 );  
        PetObject.setPetName();          
        System.out.println("Your pet's name is : " + petName);
        System.out.println(" ");
        System.out.println("Please enter " + petName + "'s Age" );
        PetObject.setPetAge();
        System.out.println("Your pet's age is : " + petAge);
        System.out.println(" ");
        System.out.println("Please enter " + petName + "'s Weight" );
        PetObject.setPetWeight();
        System.out.println("Your pet's weight is : " + petWeight);
        System.out.println(" ");

        if (youngestAge<PetObject.petAge)
                youngestAge=PetObject.petAge;
        }
        System.out.println("The youngest age here is : " + youngestAge );
}

标签: javaloopsoop

解决方案


使用的 if 条件是错误的。它将检查当前宠物对象的年龄是否大于youngestAge,然后将youngestAge 分配为当前宠物对象的年龄。

if (youngestAge<PetObject.petAge)
      youngestAge=PetObject.petAge;
}

这将产生最老的年龄而不是最年轻的。

要获得最年轻的年龄,您需要仅在当前 Pet 对象的年龄小于 youngestAge 时才分配 youngestAge 以获得最小年龄。

您得到的错误是因为您试图在静态方法 main 中访问 Pet 类的实例变量。

此外,youngestAge 应该是您的 Pet 类的一部分。宠物不应该知道到目前为止其他宠物的最小年龄。youngestAge 应该是其他类的成员,如 PetMain 类。

您可以将其设为静态变量,然后从主类访问它,也可以将其设为 main 方法中的局部变量。


推荐阅读