Ошибки 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 ;