gpt4 book ai didi

java - 使打印文本正确对齐

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:05 25 4
gpt4 key购买 nike

我是一个完全新手的程序员,我对如何使用 printf 感到非常困惑。我的代码中 printf 的使用是在 paymentCalc 方法的末尾;我正在尝试将数据打印到一行,指定要打印的 2 个小数点,并在打印下一个输出之前将其填充 10 个空格。该代码根本没有格式化。我在这里做错了什么?全部打印在同一行上,但打印了一百万位小数,而且似乎没有正确填充。

/*
* Step 1: Get starting annual interest rate
* Step 2: Get ending annual interest rate
* Step 3: Get increment rate
* Step 4: Get First # of years for repayment
* Step 5: Get Last # of years for repayment
* Step 6: Get # of years to increment by
* Step 7: Get loan amount
*
* Convert annual rates to monthly rates MIR = Annual rate/12
* MTP = # of years * 12
*
* MIR = monthly interest rate
* MTP = months to pay
* Annuity Factor =(mir*(1+mir)^mtp)/(((1+mir)^mtp)-1)
* Payment = Amount Loaned * Annuity Factor
*
*
* Produce a list of possible loan payments
* Based on a series of annual interest rates
* Start at user entered rate and increment until it hits user entered max
* Display annual payment as monthly payments
* */


import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;

public class methodshomework {
public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
//VARIABLES
//amounts in years
double startAnnInt = 0;
double endAnnInt = 0;
double incRate = 0;
double incRatePercent = 0;
double firstYears = 0;
double lastYears = 0;
double incYears = 0;
double loanAmt = 0;
//amounts in months
double startMonthInt = 0;
double endMonthInt = 0;
double monthIncRate = 0;
double firstMonths = 0;
double lastMonths = 0;
double incMonths = 0;
double monthIncRatePercent = 0;
double annIncRatePercent = 0;

System.out.println("Hello, and welcome to the loan calculator");
//Acquire necessary data
System.out.println("What is the starting annual interest rate? (please enter as XX, where XX = XX%)");
startAnnInt = (scanner.nextDouble()/100);
System.out.println("What is the ending annual interest rate? (please enter as XX, where XX = XX%)");
endAnnInt = (scanner.nextDouble()/100);
System.out.println("What is the annual increment rate? (please enter as XX, where XX = XX%)");
incRate = (scanner.nextDouble()/100);
System.out.println("What is the first term for payment (in years)?");
firstYears = scanner.nextDouble();
System.out.println("What is the last term for payment (in years)?");
lastYears = scanner.nextDouble();
System.out.println("What is the term increment (in years)?");
incYears = scanner.nextDouble();
System.out.println("What is the loan amount? (in the form XXXXXX, where XXXXXX = $XXX,XXX)");
loanAmt = scanner.nextDouble();


double[] monthArray = yearToMonth(firstYears, lastYears, incYears, startAnnInt, endAnnInt, incRate);
firstMonths = monthArray[0];
lastMonths = monthArray[1];
incMonths = monthArray[2];
startMonthInt = monthArray[3];
endMonthInt = monthArray[4];
monthIncRate = monthArray[5];
monthIncRatePercent = monthArray[6];
annIncRatePercent = monthArray[7];

paymentCalc(startMonthInt, endMonthInt, monthIncRate, firstMonths, lastMonths, incMonths, loanAmt, firstYears, lastYears, incYears, startAnnInt, endAnnInt, incRate);

}


//MODULES HERE

public static double[] yearToMonth(double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
double firstMonths = 0;
double lastMonths = 0;
double incMonths = 0;
double startMonthInt = 0;
double endMonthInt = 0;
double monthIncRate = 0;
double monthIncRatePercent = 0;
double annIncRatePercent = 0;

//do our conversions
firstMonths = (firstYears * 12);
lastMonths = (lastYears * 12);
incMonths = (incYears * 12);
startMonthInt = (startAnnInt / 12);
endMonthInt = (endAnnInt / 12);
monthIncRate = (incRate / 12);
monthIncRatePercent = (monthIncRate/100);
annIncRatePercent = (incRate/100);

//put our conversions into an array
double[] monthArray = {firstMonths, lastMonths, incMonths, startMonthInt, endMonthInt, monthIncRate, monthIncRatePercent, annIncRatePercent};

//return our conversions
return monthArray;
}


public static void paymentCalc(double startMonthInt, double endMonthInt, double monthIncRate, double firstMonths, double lastMonths, double incMonths, double loanAmt, double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
double monthInt = 0;
double monthsToPay = 0;
double rowNumber = (((lastYears - firstYears))/incYears);
double rowNumberWithInt = (rowNumber + 1);
double colNumber = ((endMonthInt - startMonthInt)/monthIncRate);
double colNumberWithTop = (colNumber+1);
double currentYears = 0;
double currentMonths = 0;
double currentMonthInt = 0;
double currentPayment = 0;
double currentAnnInt = 0;
double annuityAmt = 0;
//counting columns
for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%-10s", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%10s", currentYears + " Years"); }
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%.2f10s\n", (currentAnnInt * 100));
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (startMonthInt + (monthIncRate * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%.2f10s", currentPayment);

}

}

}


}




public static double annuityCalc(double monthInt, double monthsToPay){
double annuityFactor = 0;
double mirPow = 0;
mirPow = Math.pow((1+monthInt), monthsToPay);
annuityFactor = ((monthInt*mirPow)/(mirPow-1));
return annuityFactor;
}

}

编辑:我将代码更改为

  for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%10", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%10", currentYears + " Years"); }
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%10.2f\n", currentAnnInt);
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (startMonthInt + (monthIncRate * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%10.2f", currentPayment);

}

现在它给了我“java.util.UnknownFormatConversionException: Conversion = '1'”

编辑2:我已将代码更改为

public static void paymentCalc(double startMonthInt, double endMonthInt, double monthIncRate, double firstMonths, double lastMonths, double incMonths, double loanAmt, double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
double monthInt = 0;
double monthsToPay = 0;
double rowNumber = (((lastYears - firstYears))/incYears);
double rowNumberWithInt = (rowNumber + 1);
double colNumber = ((endMonthInt - startMonthInt)/monthIncRate);
double colNumberWithTop = (colNumber+1);
double currentYears = 0;
double currentMonths = 0;
double currentMonthInt = 0;
double currentPayment = 0;
double currentAnnInt = 0;
double annuityAmt = 0;
//counting columns
for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%-20s", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%-20s", currentYears + " Years");
}
System.out.println();
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%-20.2f%%", currentAnnInt*100);
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (firstMonths + (incMonths * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%-20.2f", currentPayment);
}
System.out.println();

}

}


}

我得到的数据是

Interest Rate                 15.0 Years          15.0 Years          15.0 Years          15.0 Years
4.25% 28235795.88 28235795.88 28235795.88 28235795.88
4.50% 26667168.53 26667168.53 26667168.53 26667168.53
4.75% 25263659.87 25263659.87 25263659.87 25263659.87
5.00% 24000502.07 24000502.07 24000502.07 24000502.07
5.25% 22857645.03 22857645.03 22857645.03 22857645.03
5.50% 21818684.11 21818684.11 21818684.11 21818684.11
5.75% 20870067.61 20870067.61 20870067.61 20870067.61
6.00% 20000502.50 20000502.50 20000502.50 20000502.50
6.25% 19200502.59 19200502.59 19200502.59 19200502.59
>

它到底为什么要这么做?似乎是在 30 年栏下打印利率,并将所有其他栏左移,并在顶栏末尾打印第一个利率

预期输出为

Interest Rate    15 Years   20 Years  25 Years  30 Years
4.0000 739.69 605.98 527.84 477.42
4.2500 752.28 619.23 541.74 491.94
4.5000 764.99 632.65 555.83 506.69
4.7500 777.83 646.22 570.12 521.65
5.0000 790.79 659.96 584.59 536.82
5.2500 803.88 673.84 599.25 552.20
5.5000 817.08 687.89 614.09 567.79
5.7500 830.41 702.08 629.11 583.57
6.0000 843.86 716.43 644.30 599.55

最佳答案

问题是,当我要求你删除 s 时,你到处都删除了......现在应该可以工作了

for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%-10s", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%10s", currentYears + " Years");
}
System.out.println();
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%10.2f%%", currentAnnInt*100);
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (startMonthInt + (monthIncRate * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%10.2f", currentPayment);
}
System.out.println();

已编辑根据OP的请求。

关于java - 使打印文本正确对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com