Java 将大量循环分解为多种方法?
我有一个未完成的代码,用于从一个初始种群创建一窝兔子 我试图通过将代码分解为多个方法,而不是使用长的Java 将大量循环分解为多种方法?,java,Java,我有一个未完成的代码,用于从一个初始种群创建一窝兔子 我试图通过将代码分解为多个方法,而不是使用长的main来提高代码的效率。但是我不知道如何在不破坏代码的情况下分解代码。我正在查看主代码 我怎么能打破这个?我想有一个方法来统计雄兔和雌兔。一种计算标准差和平均值的方法 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.ArrayList; 导入java.util.Scanner; 公共课拉比实践{ }公共静态void mai
main
来提高代码的效率。但是我不知道如何在不破坏代码的情况下分解代码。我正在查看主
代码
我怎么能打破这个?我想有一个方法来统计雄兔和雌兔。一种计算标准差和平均值的方法
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Scanner;
公共课拉比实践{
}公共静态void main(字符串[]args)引发FileNotFoundException{
File File=新文件(args[0]);
如果(!file.exists()){
System.out.println(“错误,不存在文件。程序正在停止”);
系统出口(0);
}
扫描仪s=新扫描仪(文件);
如果(!s.hasNext()){
System.out.println(“错误,没有要读取的行。程序停止”);
系统出口(0);
}
而(s.hasNext()){
整数[]总计=新整数[11][3];
int雌性=s.nextInt();
int雄性=s.nextInt();
对于(int j=0;j<11;j++){
ArrayList r=新的ArrayList();
对于(int p=0;p<女性+男性;p++){
兔子=新兔子();
如果(p<0.05){
rabbit.setSex(“F”);
}else rabbit.SetEx(“M”);
兔。坐骨();
r、 添加(兔子);
}
对于(int i=0;i<365;i++){
对于(intz=0;zpublic static void main(String[] args) throws FileNotFoundException {
File file = new File(args[0]);
if (!file.exists()) {
System.out.println("Error, No File Exists. Program Stopping.");
System.exit(0);
}
Scanner s = new Scanner(file);
if (!s.hasNext()) {
System.out.println("Error, No lines to read. Program Stopping.");
System.exit(0);
}
List<ReadResults> readyLines = readLines(s);
for (ReadResults readyLine : readyLines) {
computeTotals(readyLine);
Computations computations = doCompute(readyLine);
showResults(computations, readyLine);
}
}
static class ReadResults {
int[][] totals = new int[11][3];
int males;
int females;
}
static class Computations {
double averageTotal = 0;
double averageMales = 0;
double averageFemales = 0;
double sumT = 0;
double sumF = 0;
double sumM = 0;
double stdT = 0;
double stdF = 0;
double stdM = 0;
}
protected static void showResults(Computations computations, ReadResults readyLine) {
String middleLing = " was the final population of rabbits;";
String stadDevLine = " with standard deviation of ";
String doeS = " does, ";
String bS = " bucks.";
String shortenedTotal = String.format("%.3f", computations.stdT);
String shortenedMale = String.format("%.3f", computations.stdM);
String shortenedFemale = String.format("%.3f", computations.stdF);
System.out.println("Staring with " + readyLine.females + " doe(s) and " + readyLine.males + " buck(s):");
System.out.println("Trial 1: " + readyLine.totals[1][0] + middleLing + readyLine.totals[1][1] + doeS + readyLine.totals[1][2] + bS);
System.out.println("Trial 2: " + readyLine.totals[2][0] + middleLing + readyLine.totals[2][1] + doeS + readyLine.totals[2][2] + bS);
System.out.println("Trial 3: " + readyLine.totals[3][0] + middleLing + readyLine.totals[3][1] + doeS + readyLine.totals[3][2] + bS);
System.out.println("Trial 4: " + readyLine.totals[4][0] + middleLing + readyLine.totals[4][1] + doeS + readyLine.totals[4][2] + bS);
System.out.println("Trial 5: " + readyLine.totals[5][0] + middleLing + readyLine.totals[5][1] + doeS + readyLine.totals[5][2] + bS);
System.out.println("Trial 6: " + readyLine.totals[6][0] + middleLing + readyLine.totals[6][1] + doeS + readyLine.totals[6][2] + bS);
System.out.println("Trial 7: " + readyLine.totals[7][0] + middleLing + readyLine.totals[7][1] + doeS + readyLine.totals[7][2] + bS);
System.out.println("Trial 8: " + readyLine.totals[8][0] + middleLing + readyLine.totals[8][1] + doeS + readyLine.totals[8][2] + bS);
System.out.println("Trial 9: " + readyLine.totals[9][0] + middleLing + readyLine.totals[9][1] + doeS + readyLine.totals[9][2] + bS);
System.out.println("Trial 10: " + readyLine.totals[10][0] + middleLing + readyLine.totals[10][1] + doeS + readyLine.totals[10][2] + bS);
System.out.println("Average number of rabbits: " + computations.averageTotal + stadDevLine + shortenedTotal + ".");
System.out.println("Average number of female rabbits: " + computations.averageFemales + stadDevLine + shortenedFemale + ".");
System.out.println("Average number of male rabbits: " + computations.averageMales + stadDevLine + shortenedMale + ".");
System.out.println();
}
protected static void computeTotals(ReadResults readyLine) {
for (int j = 0; j < 11; j++) {
ArrayList<Rabbit> r = new ArrayList<>();
for (int p = 0; p < readyLine.females + readyLine.males; p++) {
Rabbit rabbit = new Rabbit();
if (p < readyLine.females) {
rabbit.setSex("F");
} else {
rabbit.setSex("M");
}
rabbit.setAge();
r.add(rabbit);
}
for (int i = 0; i < 365; i++) {
for (int z = 0; z < r.size(); z++) {
r.get(z).makeOlder();
if (r.get(z).isBirthed()) {
r.get(z).increaseLastLitter();
}
if (r.get(z).isPregnant()) {
r.get(z).increaseGestation();
}
if (r.get(z).itCanBreed()) {
r.get(z).breed();
}
if (r.get(z).itCanBreedAgain()) {
r.get(z).breed();
}
if (r.get(z).isPregnant() && r.get(z).itCanBirth()) {
r.get(z).birth();
for (int c = 0; c < r.get(z).getLitterSize(); c++) {
Rabbit baby = new Rabbit();
baby.setAge();
baby.setSex1();
r.add(baby);
}
}
}
}
int m = 0;
int f = 0;
for (int i = 0; i < r.size(); i++) {
if (r.get(i).getSex().equals("F")) {
f++;
} else if (r.get(i).getSex().equals("M")) {
m++;
}
}
readyLine.totals[j][0] = r.size();
readyLine.totals[j][1] = f;
readyLine.totals[j][2] = m;
}
}
protected static List<ReadResults> readLines(Scanner s) {
List<ReadResults> reads = new ArrayList<>();
while (s.hasNext()) {
ReadResults lineResults = new ReadResults();
lineResults.females = s.nextInt();
lineResults.males = s.nextInt();
}
return reads;
}
protected static Computations doCompute(ReadResults readyLine) {
Computations computations = new Computations();
for (int i = 0; i < 11; i++) {
computations.averageTotal += readyLine.totals[i][0];
System.out.println(computations.averageTotal);
}
for (int i = 0; i < 11; i++) {
computations.averageFemales += readyLine.totals[i][1];
}
for (int i = 0; i < 11; i++) {
computations.averageMales += readyLine.totals[i][2];
}
computations.averageTotal = computations.averageTotal / 10;
computations.averageMales = computations.averageMales / 10;
computations.averageFemales = computations.averageFemales / 10;
for (int i = 0; i < 11; i++) {
computations.sumT += Math.pow(readyLine.totals[i][0] - computations.averageTotal, 2);
}
for (int i = 0; i < 11; i++) {
computations.sumF += Math.pow(readyLine.totals[i][1] - computations.averageFemales, 2);
}
for (int i = 0; i < 11; i++) {
computations.sumM += Math.pow(readyLine.totals[i][2] - computations.averageMales, 2);
}
computations.stdT += Math.sqrt(computations.sumT / 10);
computations.stdF += Math.sqrt(computations.sumF / 10);
computations.stdM += Math.sqrt(computations.sumM / 10);
return computations;
}