【问题标题】:Arrays, arrays in "for" loops数组,“for”循环中的数组
【发布时间】:2015-11-23 02:59:33
【问题描述】:

我正在尝试正确计算一些东西。用户输入他们想要种植的树木数量,并且有一个规则,即每年有一定百分比的树木死亡。它说7年后这些树可以出售。要找到所需的最小种子数量,您需要在 7 年内为每种树木类型计算多少死亡,然后将其添加到用户输入的初始数量中,对吗?

嗯,这就是我分别为每种树类型输入20,40,30 时得到的结果:

无论如何,我得到相同数量的最小种子。我认为这与我的索引或我的 for 循环中的某些东西有关。我只是想知道如何正确计算。

另一个问题:我正在尝试正确格式化我的输出,以便它为每个变量添加标签,这样它看起来就不会那么难看。我试过"\t",但它什么也没做。我该如何解决这个问题,以及计算以便最终实际跟踪每次迭代?我应该使用decayRate[i]、desiredYield[i] 等而不是desiredYield[index] 等吗?

public class TreeCalc {

    public static void main(String[] args){

        //Initializes methods and arrays
        String[] treeTypes = new String[] {"Fir", "Pine", "Spruce"};
        int[] desiredYield = new int [treeTypes.length];
        double[] decayRate = new double[] {0.07, 0.12, 0.08};
        desiredYield = getYield(decayRate, desiredYield, treeTypes);
        int[] data = getCalculate(decayRate, desiredYield, treeTypes);

        printMessage(decayRate, desiredYield, treeTypes);
    }

    //Asks user to input # of trees for each tree type
    public static int[] getYield(double[]decayRate, int[] desiredYield,  String[]treeTypes) {

        int index= 0;
        for(int i=0;i < treeTypes.length;i++) {

            try {
                desiredYield[index] = Integer.parseInt(JOptionPane.showInputDialog("Please enter your desired yield     for: " +treeTypes[i]));
                //Catches any non-number input, displays error to user
            } catch(NumberFormatException e){
                desiredYield[index] = 0;
                JOptionPane.showMessageDialog(null, "Error: Please enter your desired yield for "+treeTypes[i]);
            }

            if (desiredYield[index] <= 0) {
                JOptionPane.showMessageDialog(null, "Error: Please enter your desired yield for "+treeTypes[i]);
            } else{
                index++;
            }
        }

        return desiredYield;
    }

    //Calculates totals and minimums
    public static int[] getCalculate(double[]decayRate, int[]desiredYield, String[]treeTypes){

        int totalSeeds =0;
        int totalTrees=0;
        int minSeeds=0;
        int index=0;

        //For each iteration of the loop, calculates totals/mins
        for(int i = 0; i < treeTypes.length; i++){
            minSeeds += (desiredYield[index] * (decayRate[index]*7)) +  desiredYield[index];
            totalSeeds += minSeeds;
            totalTrees += desiredYield[index];
        }

        return new int[] {totalSeeds, totalTrees, minSeeds};
    }

        //Prints the totals, minimums, and input from the user
    public static void printMessage(double[]decayRate, int[]desiredYield, String[]treeTypes){

        //Calls method and stores values within array
        int[]data = getCalculate(decayRate, desiredYield, treeTypes);
        int totalSeeds = data[0];
        int totalTrees = data[1];
        int minSeeds = data[2];

        //Report displays after user is done entering inputs
        String treeReport = "Tree Type | Desired Yield | Minimum Seeds | Total Seeds | Total Trees ";
        for(int i=0; i<treeTypes.length; i++){
            treeReport += "\n"+treeTypes[i] +  "  "+desiredYield[i] + "  "+minSeeds + "  "+totalSeeds + "   "+totalTrees;
        }

        JOptionPane.showMessageDialog(null, treeReport);
    }
}

【问题讨论】:

    标签: java arrays loops


    【解决方案1】:

    不,您的所需种子最少数量的公式不正确。你需要像M=Y/((1-r)^7) 这样的东西,其中 r 是每年死亡的树木的比例,Y 是期望的产量。您求解 M,即最小的种子数。

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多