有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的指数增长,返回型双倍数组

我正在做一个CS作业,我有点难以理解如何在给定用户指定的增长率的情况下,以时间增量输出一系列表示银行账户中的金额的双倍。我有一个主要方法,要求用户输入initialAmount of$、growthRate和时间间隔数(用iA、gR和nP表示初始金额、增长率和周期数)。然后,该方法调用另一个返回类型为double[]的方法。我的问题是for循环中的代码,它编译得很好,但输出的却是胡言乱语。代码如下:

import java.util.Scanner;

public class Benford {
    public static double[] generateBenfordNumbers (double iA, double gR, int nP) {  
        double[] bankStatement = new double[nP];

        for (int i = 0; i<nP; i++) { 
            bankStatement[i] = (iA*(Math.pow((1+(gR)), (i++))));
        }

        return bankStatement;
    }

    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in); 
        double iA;
        double gR;
        int nP;

        System.out.print("What is the initial amount of money that you are starting with? : ");
        iA = scan.nextDouble();
        System.out.println();

        System.out.print("What is the amount of growth per time period? : ");
        gR = scan.nextDouble();
        System.out.println();

        System.out.print("How many time periods would you like to use? : ");
        nP = scan.nextInt();
        System.out.println();

        generateBenfordNumbers(iA, gR, nP);
        System.out.print(generateBenfordNumbers(iA, gR, nP));
    }
}

共 (5) 个答案

  1. # 1 楼答案

    乱七八糟的输出如下所示:

    [D@1b67f74
    

    这是一种双数组文本表示法。你可以使用:

    System.out.print(Arrays.toString(generateBenfordNumbers(iA, gR, nP)));
    
  2. # 2 楼答案

    i增加两次:在循环级别和进入身体

  3. # 3 楼答案

    排队

    bankStatement[i] = (iA*(Math.pow((1+(gR)), (i++))));
    

    i++第二次增加i。你可能想要:

    bankStatement[i] = (iA*(Math.pow((1+(gR)), i + 1)));
    

    或者,如果我们把它清理干净

    bankStatement[i] = iA * Math.pow(1 + gR, i + 1);
    

    i + 1返回一个大于i的值1,但实际上并不增加变量本身


    还有,你真的每次都要使用Math.pow?您不能手动将数组的第一个元素设置为iA,然后使用bankStatement[i-1]来计算bankStatement[i]吗?这样做可能会改善你的程序

  4. # 4 楼答案

    你不应该在数学课上增加i。战俘。这是因为您已经在for循环中增加了它。结果是数组中的元素被跳过而没有设置。这可能就是胡言乱语的来源

    你可能想要改变:

    bankStatement[i] = (iA*(Math.pow((1+(gR)), (i++))));
    

    致:

    bankStatement[i] = iA*Math.pow(1+gR, i);
    

    另外,顺便说一句,你一般不应该使用这么多的括号,因为它使阅读变得困难。如果你不确定操作的顺序,look it up

  5. # 5 楼答案

    正如其他人所说,你将i增加了两次,所以我不会重复。我只想补充一点,方括号可以很好地组织公式,确保计算的正确执行顺序,但如果您过度使用它们,它们可能会混淆程序的意图,并且可能会使您寻找的问题更难发现。比较

    bankStatement[i] = iA * Math.pow(1.0 + gR, i+1);
    

    bankStatement[i] = (iA*(Math.pow((1+(gR)), (i))));
    

    明白我的意思吗

    编辑-在关于i的初始值的非常有效的注释之后,我更改了清理语句