Java 错误 - 初始化、语法

标签 java

我正在尝试创建一个程序来计算有关蝴蝶种群的不同数据。我的主要问题是,我不断收到 pottialPopulation 方程的错误,我在该方程中平方了 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));
    }
}

最佳答案

关于编写代码,您可以获得的第一条最佳建议是让每个函数只做一件事。我在下面重构了您的类,将您的关键功能分解为它们自己的特定方法。然后,当您对每种方法遇到问题时,您可以用该方法解决问题。

另请注意,在您的 sexRatio 零除数情况下,您将获得您从未设置或要求输入的变量 (ratioVariance) 的 sqrt。然后,您立即将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));
    }
}

关于Java 错误 - 初始化、语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094797/

相关文章:

java - 桌面应用程序中的 BIRT

java - 是否可以编写一个在有结果时提前退出的 Java 收集器?

java - 在请求范围上迭代和设置属性

java - OpenCV - Java - 如何删除集群周围的一些像素

java - 用 Java 编写视频文件

java - 对字符进行排序

java - 如何像在后台那个目录中一样执行脚本(例如 mvnw)?

java - Maxima 中的基本类型 boolean 值

java - 由于依赖项 xerces :xercesImpl:jar:2. 9.1,Grails 运行应用程序失败

java - 使用另一个表的结果将数据插入到多个表中