【问题标题】:Java - Need Help Making My Calculation Program More Efficient, Use an Array?Java - 需要帮助使我的计算程序更高效,使用数组?
【发布时间】:2017-10-24 01:54:08
【问题描述】:

我目前正在学习 Java 语言,这是我的第一门编程语言。我对数组进行了研究,并试图让我的程序更高效、更简单。我意识到原始代码中有很多重复。我感谢任何提示和批评。

import java.util.Scanner;

public class Calculator {

static Scanner sc = new Scanner(System.in);//sets up scanner import

public static void main(String[] args) 
{
    double initalInvestment;
    double interestRate;
    int yearsInvested;
    int arrInt[] = new int[5];

    arrInt[0] = 1;

    int i = 1;
    while (i <= 4) {
        arrInt[i] = i + 1;
        i++;
    }

    System.out.println("Enter Inital Investment: ");
    initalInvestment = sc.nextDouble();

    System.out.println("Enter Interest Rate: ");
    interestRate = sc.nextDouble();

    System.out.println("Enter Years Invested: ");
    yearsInvested = sc.nextInt();

    double money1 = initalInvestment * interestRate;

    double money2 = money1 + initalInvestment;

    double y1 = money2;
    double y2 = y1 * interestRate + y1;
    double y3 = y2 * interestRate + y2;

    if (yearsInvested <= 1) 
    {
    System.out.println("Your Total for year: " + arrInt[0] + ", is " + y1 + "$");
    } else if (yearsInvested <= 2) {
        System.out.println("Your Total for year: " + arrInt[0] + ", is " + y1 + "$");
        System.out.println("Your Total for year: " + arrInt[1] + ", is " + y2 + "$");
    } else if (yearsInvested <= 3) {
        System.out.println("Your Total for year: " + arrInt[0] + ", is " + y1 + "$");
        System.out.println("Your Total for year: " + arrInt[1] + ", is " + y2 + "$");
        System.out.println("Your Total for year: " + arrInt[2] + ", is " + y3 + "$");
    } else if (yearsInvested <= 4) {
        System.out.println("Your Total for year: " + arrInt[0] + ", is " + y1 + "$");
        System.out.println("Your Total for year: " + arrInt[1] + ", is " + y2 + "$");
        System.out.println("Your Total for year: " + arrInt[2] + ", is " + y3 + "$");
        System.out.println("Your Total for year: " + arrInt[3] + ", is " + y3 + "$");
    } else if (yearsInvested <= 5) {
        System.out.println("Your Total for year: " + arrInt[0] + ", is " + y1 + "$");
        System.out.println("Your Total for year: " + arrInt[1] + ", is " + y2 + "$");
        System.out.println("Your Total for year: " + arrInt[2] + ", is " + y3 + "$");
        System.out.println("Your Total for year: " + arrInt[3] + ", is " + y3 + "$");
    }

 }

}

【问题讨论】:

  • 如果程序有效但您只想优化,也许代码审查交流是发布此问题的最佳场所?
  • 虽然,反正好像也不对,所以说不定这里才是最好的地方。
  • 感谢您检查代码审查交流

标签: java arrays performance


【解决方案1】:

您不希望yearsInvested 的每个可能值都有明确的案例。这种方法意味着您可能正在复制粘贴代码并稍作修改,这很容易出错 - 事实上,我看到了复制粘贴错误;您的 5 年案例只有 4 年,y3 在 4 年和 5 年案例中被列出两次。 (想象一下,如果乔治华盛顿自 1776 年以来不理会它,他花了 241 年的时间来计算目前在他的银行账户中的金额——这将是一个不合理的代码量。)

现在,您的数组的内容只是 {1,2,3,4,5}。你当然不需要一个数组来数到五。我不相信这个程序需要一个数组(你可能只是在一个 for 循环中同时完成输入和输出),但如果你想使用一个,把你的结果放在里面的计算。

您可以使用for 循环将内容放入数组并从数组中读取值 - 例如,从数组中读取值可能如下所示:

for (int i = 0; i < yearsInvested; x++)
{
    System.out.println("Your Total for year: " + (i+1) + ", is " + resultsArray[i] + "$");
}

【讨论】:

    【解决方案2】:

    您根本不需要存储总数 - 如果您所做的只是打印出每年的累计总数,那么您可以随时计算:

    double investment = scanner.nextDouble();
    ...
    
    for (int year = 0; year < yearsInvested; year++) {
        investment += investment * interestRate;
        System.out.println("Total year " + year + " is " + investment);
    }
    

    如果您确实需要存储这些值,那么我建议您使用 List 而不是数组。对于初学者来说,它们更容易学习。

    List<Integer> totals = new ArrayList<>();
    for (int year = 0; year < yearsInvested; year++) {
        investment += investment * interestRate;
        totals.add(investment);
    }
    

    【讨论】:

    • 感谢您的帮助,能够将其从 85 行减少到 25...
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多