2012-12-11 89 views
0

我正在做一个任务,我需要找到多少年前,小物种的人口超过较大物种的人口。Java代码编译但整个代码不运行

我创建的程序编译,但只贯穿前半部分。在if-else循环开始之前,它没有输出两个system.out.println命令之后的任何内容。

我需要采取哪些步骤来调整程序代码,以便它能够成功运行if-else循环?

类:

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

方案:

import java.util.Scanner; 
public class KlingonOx extends Species 
{ 
    public static void main(String[] args) 
    { 
     new KlingonOx().run(); 
    } 

    public void run() 
    { 
     Species klingonSpecies = new Species("Ox", 100, 15); 
     Species earthSpecies = new Species("Elephant", 10, 35); 

     klingonSpecies.readInput(); 
     klingonSpecies.writeOutput(); 
     klingonSpecies.predictPopulation(10); 
     klingonSpecies.setSpecies("Ox", 100, 15); 
     klingonSpecies.setName("Ox"); 
     klingonSpecies.setPopulation(100); 
     klingonSpecies.setGrowthRate(15); 
     klingonSpecies.getName(); 
     klingonSpecies.getPopulation(); 
     klingonSpecies.getGrowthRate(); 
     klingonSpecies.equals(earthSpecies); 

     earthSpecies.readInput(); 
     earthSpecies.writeOutput(); 
     earthSpecies.predictPopulation(10); 
     earthSpecies.setSpecies("Elephant", 10, 35); 
     earthSpecies.setName("Elephant"); 
     earthSpecies.setPopulation(10); 
     earthSpecies.setGrowthRate(35); 
     earthSpecies.getName(); 
     earthSpecies.getPopulation(); 
     earthSpecies.getGrowthRate(); 
     earthSpecies.equals(klingonSpecies); 

     System.out.println("The " + klingonSpecies.getName() + " starting population is: " + klingonSpecies.getPopulation()); 
     System.out.println("The " + earthSpecies.getName() + " starting population is: " + earthSpecies.getPopulation()); 


     int year = 0; 
     int newkpop = 100; 
     int newepop = 10; 
     if (klingonSpecies.getPopulation() < earthSpecies.getPopulation()) 
     { 
      while (klingonSpecies.getPopulation() < earthSpecies.getPopulation()) 
      { 
       newkpop = (int)(klingonSpecies.getPopulation() + (klingonSpecies.getPopulation()*1.15)); 
       newepop = (int)(earthSpecies.getPopulation() + (earthSpecies.getPopulation()*1.35)); 
       year ++; 
      } 
      System.out.println("The population of " + klingonSpecies.getName() + " exceeds the population of " + earthSpecies.getName() + " in " + year + "years."); 
     } 
     else 
     { 
     while (klingonSpecies.getPopulation() > earthSpecies.getPopulation()) 
      { 
       newkpop = (int)(klingonSpecies.getPopulation() + (klingonSpecies.getPopulation()*1.15)); 
       newepop = (int)(earthSpecies.getPopulation() + (earthSpecies.getPopulation()*1.35)); 
       year ++; 
      } 
      System.out.println("The population of " + earthSpecies.getName() + " exceeds the population of " + klingonSpecies.getName() + " in " + year + "years."); 
     } 

    } 
} 
+1

1)你看到了什么结果? 2)你期望看到什么? 3)为什么KlingonOx类扩展物种? –

+0

程序是否停止,或者控制台是否停止工作? – Aaron

+0

使用调试器并跟踪程序执行 – MadProgrammer

回答

1

你有Species#setPopulation()方法,但它看起来像你忘了使用它。在两个循环中都使用klingonSpecies.setPopulation(newkpop);earthSpecies.setPopulation(newepop);

与循环问题无关:您可能想要使用Species#getGrowthRate()而不是输入数字1.15和1.35。

0

的问题是,你永远不更新物种的种群:

klingonSpecies.setPopulation(newkpop); 
earthSpecies.setPopulation(newepop) 
0

开始的事实,你永远不改变你的循环两种物种的种群,所以人数却保持不变。

在进行计算时,您需要将变化应用到对象的实例,推测可能使用setPopulation方法,或者您需要为每个物种保留单独的变量,随着循环的进行需要保留当前的人口。