Ошибки Java - инициализация, синтаксис

Я пытаюсь создать программу, которая рассчитывает различные данные о популяциях бабочек. Моя главная проблема заключается в том, что я получаю сообщение об ошибке potentialPopulation уравнение, где я возводить в квадрат ratioFactor значение. Ошибка в том, что значение, которое я возводю в квадрат, "возможно, не было инициализировано". Я знаю, мне нужно установить ratioFactor до значения, но значение будет неизвестно, пока не будут введены входные данные. Кроме того, я новичок, поэтому, если кто-нибудь увидит какие-либо другие ошибки, я буду очень признателен за любую помощь. Спасибо

// This program calculates butterfly population estimates
//   Inputs  : males,   estimated number of male butterflies
//             females, estimated number of female butterflies
//   Outputs : total butterflies, sex ratio, variance
// Written by: Charlie
//   Modified: Oct 26, 2012 by Daniel Kellogg
//

import java.util.Scanner;
import java.text.DecimalFormat;
public class Hwk7 {
    public static void main (String[] args) {
            int males, females;

            int totalButterflies, sexRatio, ratioVariance, genderDifferences, matingPairs, growthFactor, ratioFactor, potentialPopulation, x;

            Scanner stdin = new Scanner(System.in);

            System.out.println("\nButterfly Estimator\n");
            System.out.print("Enter the estimated males population: ");
            males = stdin.nextInt();
            System.out.print("Enter the estimated females population: ");
            females = stdin.nextInt();

            totalButterflies  = males + females;
            sexRatio          = males / females;
            ratioVariance     = males % females;
            genderDifferences = males - females;
            matingPairs       = males * females;
            growthFactor      = (int)(Math.sqrt(matingPairs));

            if (sexRatio != 0){
                    ratioFactor       = growthFactor / sexRatio;

             if (sexRatio == 0){
                   ratioFactor = (int)(Math.sqrt(ratioVariance));
            }
            ratioFactor = x;
            potentialPopulation = x^2;

            System.out.println("\nTotal Butterflies: " + totalButterflies );
            System.out.println("Sex Ratio        : " + sexRatio );
            System.out.println("Variance         : " + ratioVariance );
            System.out.println("Gender Differences: " + genderDifferences );
            System.out.println("Possible Mating Pairs: " + matingPairs );
            DecimalFormat oneDigit = new DecimalFormat("#.000");
            System.out.println("Growth Factor: " + growthFactor + oneDigit.format(growthFactor));
            DecimalFormat twoDigit = new DecimalFormat("#.0");
            System.out.println("Ratio Factor: " + ratioFactor + twoDigit.format(ratioFactor));
            DecimalFormat threeDigit = new DecimalFormat("##0");
            System.out.println("Potential Population: " + potentialPopulation + threeDigit.format(potentialPopulation));
    }
}

2 ответа

Решение

Лучший совет, который вы можете получить при написании кода, - заставить каждую функцию выполнять только одно. Я реорганизовал ваш класс ниже, чтобы разбить ваши ключевые функции на их собственные, конкретные методы. Затем, когда у вас есть проблемы с каждым методом, вы можете решить проблему с помощью этого метода.

Также обратите внимание, что в вашем случае делителя нуля sexRatio вы получаете sqrt переменной (ratioVarianceВы никогда не устанавливаете или не запрашиваете вход. Затем вы немедленно сбрасывает ratioFactor в x - таинственная переменная, которая также никогда не устанавливается.

import java.util.Scanner;
import java.text.DecimalFormat;
public class Hwk7 {
    private Scanner stdin = new Scanner(System.in);//This needs to be used throughout your class

    //Do these defaults make sense?
    private int males = 0;
    private int females = 0;

    private int totalButterflies  = 0;
    private double sexRatio       = 0;
    private int ratioVariance     = 0;
    private int genderDifferences = 0;
    private int matingPairs       = 0;
    private double growthFactor   = 0;
    private int potentialPopulation = 0;


    public static double getInput(String message, int input) {
        System.out.print(message);
        input = stdin.nextInt();
    }

    public static void main (String[] args) {
        Hwk7 hw = new Hwk7();
        hw.run();
    }

    public void run() {
        System.out.println("\nButterfly Estimator\n");

        getInput("Enter the estimated males population: ", males);
        getInput("Enter the estimated females population: ", females);

        calculateResults();
        printResults();
    }

    public void calculateResults() {
        totalButterflies  = males + females;
        sexRatio          = males / females;
        ratioVariance     = males % females;
        genderDifferences = males - females;
        matingPairs       = males * females;
        growthFactor      = (int)(Math.sqrt(matingPairs));
        ratioFactor       = calculateRatioFactor(growthFactor, sexRatio);
        potentialPopulation = x^2;//where are you getting x from!?
    }

    //Note in your original implementation you calculate this and then immediately
    //change it to the value 'x'! This is clearly wrong.
    public static double calculateRatioFactor(int growthFactor, int sexRatio) {
        if (sexRatio == 0) {
            return Math.sqrt(RATIOVARIANCE);//Ratio variance is never set!
        } else {
            return growthFactor / sexRatio;
        }
    }

    public static void printResults(int males, int females) {
       System.out.println("\nTotal Butterflies: " + totalButterflies );
       System.out.println("Sex Ratio        : " + sexRatio );
       System.out.println("Variance         : " + ratioVariance );
       System.out.println("Gender Differences: " + genderDifferences );
       System.out.println("Possible Mating Pairs: " + matingPairs );
       DecimalFormat oneDigit = new DecimalFormat("#.000");
       System.out.println("Growth Factor: " + growthFactor + oneDigit.format(growthFactor));
       DecimalFormat twoDigit = new DecimalFormat("#.0");
       System.out.println("Ratio Factor: " + ratioFactor + twoDigit.format(ratioFactor));
       DecimalFormat threeDigit = new DecimalFormat("##0");
       System.out.println("Potential Population: " + potentialPopulation + threeDigit.format(potentialPopulation));
    }
}

Ваша переменная x никогда не инициализируется и вы используете его

 ratioFactor = x;
 potentialPopulation = x ^ 2;

Я думаю, что вы хотите сделать, это

  x= ratioFactor ;
Другие вопросы по тегам