当前位置: 首页 > 知识库问答 >
问题:

对于由用户结束或重新启动的程序,良好的类组织

江煜
2023-03-14

我写了一个小程序,它根据用户输入到控制台的贷款金额、利率和期限计算总利息、总利息百分比和其他指标。我的问题是:我想让程序比较用户想要输入的贷款数量的成本。那么,当用户输入他们想要测试另一个贷款时,让我所有的方法重新运行的最佳方法是什么?我应该使用方法链接吗?我应该有一个不同的类来管理这部分程序吗?提前谢谢。贷款程序的代码如下。

import java.util.Scanner;

public class loanCalculator implements Comparable<loanCalculator> {

  //class variables 
  double term, rate, amount, monthlyPayment, perRate, totalRepaid, 
  totalPrincipalRepaid, totalInterestRepaid, totalInterestPercentage; 

  final double MONTHS_IN_YEAR = 12; 

  Scanner scan = new Scanner(System.in);

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    loanCalculator loan = new loanCalculator(); 
    loan.getTerm(); 
    loan.getRate(); 
    loan.getAmount();
    loan.setPeriodicInterestRate();
    loan.setMonthlyPayment();
    loan.setTotalRepaid();
    loan.setTotalPrincipalRepaid();
    loan.setTotalInterestRepaid();
    loan.setTotalInterestPercentage();
    System.out.println(loan.toString()); 

  }

  void getTerm() { 
    System.out.println("Enter the term of the loan in years");
    this.term = scan.nextDouble(); 
  }

  void getRate() { 
    System.out.println("Enter the rate");
    this.rate = scan.nextDouble(); 
  }

  void getAmount() { 
    System.out.println("Enter the amount (no commas or dollar signs");
    this.amount = scan.nextDouble(); 
  }

  void setPeriodicInterestRate() { 
    this.perRate = this.rate / 12 /100; 
  }

  void setMonthlyPayment() { 
    double N = -term*MONTHS_IN_YEAR;
    this.monthlyPayment = (perRate * amount) / (1-(Math.pow((1+perRate), N)));
  }

  void setTotalRepaid() { 
    this.totalRepaid = term * MONTHS_IN_YEAR * (monthlyPayment);
  }

  void setTotalPrincipalRepaid() { 
    this.totalPrincipalRepaid = amount; 
  }

  void setTotalInterestRepaid() { 
    this.totalInterestRepaid = totalRepaid - totalPrincipalRepaid; 
  }

  void setTotalInterestPercentage() { 
    totalInterestPercentage = totalInterestRepaid/amount; 
  }

  @Override
  public String toString() { 
    return "Amount: " + amount + "\n" + "Term: " + term + "\n" + "Rate: " + rate + 
            "\n" + "Monthly Payment: " + monthlyPayment + "\n" + "Total Repaid: " + totalRepaid + 
            "\n" + "Total Int Repaid: " + totalInterestRepaid + "\n" + "Total Int Percentage: " + 
            totalInterestPercentage; 
  }

  @Override
  public int compareTo(loanCalculator loan1) {
    // TODO Auto-generated method stub
    if(this.totalInterestPercentage - loan1.totalInterestPercentage > 0) { 
        return 1; 
    }

    if(this.totalInterestPercentage - loan1.totalInterestPercentage < 0) { 
        return -1; 
    }

    else if(this.totalInterestPercentage - loan1.totalInterestPercentage ==0) { 
        return 0; 
    }

    return 0;

  }

  public void difference(loanCalculator loan1) { 

    if(this.compareTo(loan1) == 1) { 
        System.out.print("Loan 2 is cheaper by: " + (this.totalInterestPercentage - loan1.totalInterestPercentage)); 
    }

    if(this.compareTo(loan1) == 0) { 
        System.out.print("The two loans cost the same");
    }

    else if(this.compareTo(loan1) == 1) { 
        System.out.print("Loan 1 is cheaper by: " + (this.totalInterestPercentage - loan1.totalInterestPercentage)); 
    }

  }
}

共有1个答案

乜安志
2023-03-14

(从头开始)将主方法中的代码放入新方法:

public static void calculator() {
...
}

然后在main中循环调用计算器():

while(true) {
    calculator();
}

如何终止?可能是这样的:

 while(true) {
     try {
        calculator();
     } catch (Exception ex) { //scanner will throw an Exception on not valid input
        break;
     }
 }
 类似资料:
  • 问题内容: 我想编写一个执行屏幕操作的Java终端应用程序。有没有好的图书馆可以让您像* nix / C世界中的诅咒一样操纵屏幕? 我正在寻找的最小功能是窗口和用户输入支持。 在功能方面,我想在终端的区域中定期更新一些数据,同时(同时)用户可以在屏幕的其他部分输入命令/文本。 问题答案: 有Charva,它链接到本机代码,但是具有基于Swing的api

  • 问题内容: 我愿意在应用程序中添加一个按钮,单击该按钮将重新启动该应用程序。我搜索谷歌,但没有发现任何有用的,除了这一个。但是,此处遵循的过程违反了Java的WORA概念。 是否有其他以Java为中心的方法来实现此功能?是否可以只派生另一个副本然后退出? 提前致谢。我感谢您的帮助。 @deporter我已经尝试过您的解决方案,但是它不起作用:( @mKorbel我写的,采取的概念下面的代码,你曾在

  • 我有一个调用MMQ侦听器的Java Servlet。我正在Tomcat服务器中部署应用程序 AppServlet.java

  • 我是appium的新手,目前正在尝试创建一些简单的测试。我的问题是我根本无法启动正在测试的应用程序,它唯一有效的时间是使用appium-dotnet-驱动程序解决方案中包含的演示应用程序通过github提供 https://github.com/appium/appium-dotnet-driver 我已经在我的Nexus 5和几个模拟器上尝试了2个不同的应用程序,但没有任何效果(请参阅下面的附加

  • 我是C编程的初学者,如果我能得到一些关于如何重新启动程序的提示,我将不胜感激?我目前正在开发一个猜测游戏,用户有10次尝试猜测随机提供的秘密号码。我希望该程序能够从一开始就为用户提供新一轮游戏(尝试次数1猜测次数:),这意味着重新运行该程序。 以下是节目:

  • 我正在使用此代码,无法在我的移动设备上启动应用程序 TLDR: 原始错误:活动名称'。用于启动应用程序的SplashActivity不存在或无法启动!确保它存在并且是可启动的活动 下面是我的错误日志 log4j:WARN找不到记录器(org.apache.http.client.protocol.RequestAddCookies)的追加器。log4j:警告请正确初始化log4j系统。log4j: