我正在尝试创建一个程序来计算有关蝴蝶种群的不同数据。我的主要问题是,我不断收到 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/