0

私は、小さな種の個体数が大きな種の個体数を超えるまでに何年かかるかを見つける必要がある課題に取り組んでいます。

私が作成したプログラムはコンパイルされますが、前半しか実行されません。if-else ループが始まる前に、2 つの 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.");
        }

    }
}
4

3 に答える 3

1

メソッドがありますがSpecies#setPopulation()、それを使用するのを忘れているようです。両方のループでklingonSpecies.setPopulation(newkpop);andを使用します。earthSpecies.setPopulation(newepop);

ループの問題とは関係ありません:Species#getGrowthRate()数値 1.15 と 1.35 を入力する代わりに使用したい場合があります。

于 2012-12-11T02:20:05.687 に答える
0

ループ内のどちらの種の個体数も変更しないという事実から始めて、個体数は実際には同じままです。

計算を行うときは、オブジェクトのインスタンスに変更を適用する必要があります。おそらくsetPopulationメソッドを使用するか、ループが進行するにつれて現在の人口を取得する種ごとに個別の変数を維持する必要があります。

于 2012-12-11T02:28:16.047 に答える
0

問題は、種の個体数を決して更新しないことです:

klingonSpecies.setPopulation(newkpop);
earthSpecies.setPopulation(newepop)
于 2012-12-11T02:22:24.337 に答える