我需要从以下类列表(Species.java)访问私有变量,以便在KlingonOx.java类中使用它们。
KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量。
这是Species.java类:
import java.util.Scanner;
public class Species
{
private String name;
private int population;
private double growthRate;
public void readInput()
{
Scanner keyboard = new Scanner(System.in);
System.out.println("What is the species' name?");
name = keyboard.nextLine();
System.out.println("What is the population of the species?");
population = keyboard.nextInt();
while(population < 0)
{
System.out.println("Population cannot be negative.");
System.out.println("Reenter population:");
population = keyboard.nextInt();
}
System.out.println("Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble();
}
public void writeOutput()
{
System.out.println("Name = " + name);
System.out.println("Population = " + population);
System.out.println("Growth rate = " + growthRate + "%");
}
public int predictPopulation(int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while( (count>0) && (populationAmount>0) )
{
populationAmount = (populationAmount + (growthRate/100) * populationAmount);
count --;
}
if (populationAmount > 0)
result = (int)populationAmount;
return result;
}
public Species(String name)
{
name = name;
population = 0;
growthRate = 0.0;
}
public Species(int population)
{
name = "";
if (population > 0)
population = population;
else
{
System.out.println("ERROR: using a negative" + "population.");
System.exit(0);
}
growthRate = 0.0;
}
public Species(double growthRate)
{
name = "";
population = 0;
growthRate = growthRate;
}
public Species(String name, int population, double growthRate)
{
name = name;
if (population > 0)
population = population;
else
{
System.out.println("ERROR: using a negative" + "population.");
System.exit(0);
}
growthRate = growthRate;
}
public Species()
{
name = "";
population = 0;
growthRate = 0;
}
public void setSpecies(String newName, int newPopulation, double newGrowthRate)
{
name = newName;
if (newPopulation >= 0)
population = newPopulation;
else
{
System.out.println("ERROR: using a negative " + "population.");
System.exit(0);
}
growthRate = newGrowthRate;
}
public void setName(String name)
{
name = name;
}
public void setPopulation(int population)
{
if (population > 0)
population = population;
else
{
System.out.println("ERROR: using a negative" + "population.");
System.exit(0);
}
}
public void setGrowthRate(double growthRate)
{
growthRate = growthRate;
}
public String getName()
{
return name;
}
public int getPopulation()
{
return population;
}
public double getGrowthRate()
{
return growthRate;
}
public boolean equals(Species otherObject)
{
return (name.equalsIgnoreCase(otherObject.name)) &&
(population == otherObject.population) &&
(growthRate == otherObject.growthRate);
}
}
这是KlingonOx.java类:
import java.util.Scanner;
public class KlingonOx extends Species
{
public static void main(String[] args)
{
new KlingonOx().run();
}
public void run()
{
Species klingonox = new Species();
Species elephant = new Species();
System.out.println("Please enter data on the species Klingon Ox.");
klingonox.readInput();
klingonox.writeOutput();
klingonox.setPopulation(int population);
population = population;
klingonox.setGrowthRate(double growthRate);
growthRate = growthRate;
System.out.println("Please enter data on the species Elephant.");
elephant.readInput();
elephant.writeOutput();
elephant.setPopulation(population);
population = population;
elephant.setGrowthRate(growthRate);
growthRate = growthRate;
int year = 0;
if(klingonox.population < elephant.population)
{
while(klingonox.population < elephant.population)
{
klingonox.population = (int)(klingonox.population + (klingonox.population * (klingonox.growthRate/100) ) );
elephant.population=(int)(elephant.population + (elephant.population * (elephant.growthRate/100) ) );
year++;
}
System.out.println("KLINGON OX EXCEEDS ELEPHANT IN" + year + "YEARS");
}
else
{
while(klingonox.population > elephant.population)
{
klingonox.population=(int)(klingonox.population+(klingonox.population*(klingonox.growthRate/100)));
elephant.population=(int)(elephant.population+(elephant.population*(elephant.growthRate/100)));
year++;
}
System.out.println("ELEPHANT EXCEEDS KLINGON OX IN" + year + "YEARS");
}
}
}
KlingonOx.java类给出了一个错误,即“population”和“growthRate”是Species中的私有实例变量,因此无法访问。我曾尝试使用getPopulation和getGrowthRate方法调用来检索变量,但我不确定如何正确地执行此操作。
感谢任何反馈。
答案 0 :(得分:6)
在带变量的课程中:
class Foo {
private int variable;
public int getVariable() { return variable; }
}
在客户端类中:
class Bar {
void method() {
...
Foo foo = new Foo();
int population = foo.getVariable();
...
}
}
这几乎就是一切。
答案 1 :(得分:1)
您应该使用klingonox.population
而不是klingonox.getPopulation()
,而您的其他Species
对象也是如此。
这应该是您使用getPopulation
方法所需进行的唯一更改。
答案 2 :(得分:1)
首先,
klingonox.setPopulation(int population);
population = population;
klingonox.setGrowthRate(double growthRate);
growthRate = growthRate;
如果您设置的人口通过值klingonox.setPopulation(20),为什么要尝试将人口分配给人口。 KlingonOx没有现场人口。调用readInput();
时,应已分配您的填充名称和growthRate与象物相同。
答案 3 :(得分:0)
使用
klingonox.getPopulation();
答案 4 :(得分:0)
private
访问修饰符允许我们隐藏变量,以便只能访问声明它的类。你上课 -
public class Species {
private String name;
private int population;
private double growthRate;
public int getPopulation(){return population;}
public double growthRate(){return growthRate;}
}
这个概念也称为封装,我们使用public
方法来访问和修改private
变量。
答案 5 :(得分:0)
- 您想要从instance variable
- 类访问Super
- 类的Sub
。
- 使用super
关键字和Getter-Setter
方法。
<强>例如强>
public class Species
{
private String name;
private int population;
private double growthRate;
public int getPopulation(){
return this.population;
}
public double getGrowthRate(){
return this.growthRate;
}
public String getName(){
return this.name;
}
// Setters...........
}
public class KlingonOx extens Spices{
.......
.......
public static void main(String[] args){
int p = super.getPopulation();
........
........
}
}