Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将大量循环分解为多种方法?_Java - Fatal编程技术网

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;
}