java - 不能从静态上下文引用非静态变量“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 );
}
解决方案
使用的 if 条件是错误的。它将检查当前宠物对象的年龄是否大于youngestAge,然后将youngestAge 分配为当前宠物对象的年龄。
if (youngestAge<PetObject.petAge)
youngestAge=PetObject.petAge;
}
这将产生最老的年龄而不是最年轻的。
要获得最年轻的年龄,您需要仅在当前 Pet 对象的年龄小于 youngestAge 时才分配 youngestAge 以获得最小年龄。
您得到的错误是因为您试图在静态方法 main 中访问 Pet 类的实例变量。
此外,youngestAge 应该是您的 Pet 类的一部分。宠物不应该知道到目前为止其他宠物的最小年龄。youngestAge 应该是其他类的成员,如 PetMain 类。
您可以将其设为静态变量,然后从主类访问它,也可以将其设为 main 方法中的局部变量。
推荐阅读
- assembly - 如何在 68000 汇编中显示负数?
- unit-testing - 测试通过,但之后给出断言错误
- javascript - 如何将使用 ES6 代码创建的对象推送到 javascript 中的数组中
- ios - 以编程方式将系统图像添加到导航栏
- python - 我该如何优化这个 python 循环?
- architecture - 内存更改后何时更新持久层?
- vue.js - 如何在页面加载时在 vue 中呈现来自 Firebase 的数据
- c# - 让连字在 SharpDX/DirectWrite 中工作
- typo3 - 是否可以截断 sys_file_processedfile?
- java - 如何通过回调方法将点击位置的item传回Activity