0

我正在尝试将我的一维数组转换为多维数组。将现有的 Interest Calculator Batch 应用程序从几个一维数组转换为 1 个多维数组。使用以下数据类型:double[][] 值;提示:数据集的最大数量(5)将是您的行,每个数据数组(来自原始的 InterestCalculatorBatch)(7)将是一列。2.所有数据都将包含在一个多维数组中。3.修改sortBySimple和displayInterest方法,接受单个多维数组,而不是多个单维数组

我修复了 displayInterest 以接受单个多维数组。如果我正确设置了 sortBySimple 以及当我需要修复这些或保持它们原样时程序计算利息时,我会感到困惑。感谢您的帮助。

import java.util.Scanner;
public class InterestCalculatorBatchMDA {
public static void main(String[] args )
{
    int cnt = 0; 
    double[][] arrPrincipalAmt = new double[5][7];
    double[][] arrInterestRate = new double[5][7];
    double[][] arrTerm = new double[5][7];
    double[][] arrSimple = new double[5][7];
    double[][] arrCompoundMonthly = new double[5][7];
    double[][] arrCompoundDaily = new double[5][7];
    double[][] arrCompoundWeekly = new double[5][7];


    do{ 
        arrPrincipalAmt[cnt] = getPrincipalAmount(1);
        arrInterestRate[cnt] = getInterestRate(1);
        arrTerm[cnt] = getTerm(1);

        arrSimple[cnt] =         round(calculateSimpleInterest(arrPrincipalAmt[cnt], arrInterestRate[cnt], arrTerm[cnt]),5);
        arrCompoundMonthly[cnt] = round(calculateCompoundInterest(arrPrincipalAmt[cnt], arrInterestRate[cnt],arrTerm[cnt] ,12.0 ),5); 
        arrCompoundWeekly[cnt] = round(calculateCompoundInterest(arrPrincipalAmt[cnt], arrInterestRate[cnt], arrTerm[cnt], 52.0 ),5);
        arrCompoundDaily[cnt] = round(calculateCompoundInterest(arrPrincipalAmt[cnt], arrInterestRate[cnt], arrTerm[cnt], 365.0 ),5);

        cnt++;
    }while (cnt < 5 && askYesNo("Enter another set of data (Yes/No):")); 

    displayInterest(arrPrincipalAmt,arrInterestRate,arrTerm,arrSimple,arrCompoundMonthly,arrCompoundWeekly,arrCompoundDaily,cnt);
    sortBySimple(arrPrincipalAmt,arrInterestRate,arrTerm,arrSimple,arrCompoundMonthly,arrCompoundWeekly,arrCompoundDaily,cnt);
    displayInterest(arrPrincipalAmt,arrInterestRate,arrTerm,arrSimple,arrCompoundMonthly,arrCompoundWeekly,arrCompoundDaily,cnt);

}


/** Round **/
  public static double round(double numb1, double numb2) {
    double round = ((double) Math.round(numb1*(Math.pow(10, numb2)))/(Math.pow(10, numb2)));;
    return round;
  }

  /** Calculate Simple **/
  public static double calculateSimpleInterest(double numb1, double numb2, double numb3) {
    double calculateSimpleInterest = ((numb1)*(numb2/100.0)*(numb3/12.0));
    return calculateSimpleInterest;
  }

  /** Calculate Compounded Daily **/
  public static double calculateCompoundInterest(double numb1, double numb2, double numb3, double numb4 ) {
     double calculateCompoundInterest = (numb1*Math.pow((1.0+((numb2/100.0)/numb4)),(numb4*(numb3/12.0))))-numb1;
    return calculateCompoundInterest;
  }

  /** Get principal amount **/
  public static double getPrincipalAmount(double numb1) {
      Scanner input = new Scanner(System.in);
      double numb2 = 1;
     do{System.out.print("Enter Loan Amount: ");
       numb2 = input.nextDouble();
       if(numb2 > 0);

            else{   
                    System.out.println("Data Error: Loan amount must be greater than zero. You entered " +numb2);
            }       
           }while (numb2 < 0);
    return numb2;
  }

  /** Get interest rate **/
  public static double getInterestRate(double numb1) {
      Scanner input = new Scanner(System.in);
      double numb2=1;
      do{System.out.print("Enter Yearly Interest Rate (1 to 100 percent): ");
        numb2 = input.nextDouble(); 
      double getInterestRate = 0;
     if (numb2 >= 0 && numb2 <= 100)
      getInterestRate = numb2;
            else{   
                    System.out.println("Data Error: Interest rate must be greater than or equal to zero and less than or equal to 100. You entered " +numb2);
            }       
           }while (numb2 <= 0 || numb2 >= 100);
    return numb2;
  }

  /** Get term **/
  public static double getTerm(double numb1) {
      Scanner input = new Scanner(System.in);
      double numb2=1;
      do{System.out.print("Enter the Term (in months): ");
        numb2 = input.nextInt();
      double getTerm = 0;
      if (numb2 > 0)
      getTerm = numb2;
            else{   
                    System.out.println("Data Error: Loan amount must be greater than zero. You entered " +numb2);
            }       
           }while (numb2 <= 0);
    return numb2;
  }

  /** Sort by simple interest **/
  public static void sortBySimple(double[][] arrPrincipalAmt ,double[][]  arrInterestRate, double[][]  arrTerm, double[][]  arrSimple, double[][]  arrCompoundMonthly, double[][]  arrCompoundWeekly, double[][]  arrCompoundDaily, double count){
      for(int i = 0;i<count;i++)
      {
      for(int j=i+1; j<count;j++)
      {
      if(arrSimple[i][j] < arrSimple[i][j])
      {
      double temp = arrSimple[i][j];
      arrSimple[i][j] = arrSimple[i][j];
      arrSimple[i][j] = temp;

      double temp1 = arrPrincipalAmt[i][j];
      arrPrincipalAmt[i][j] = arrPrincipalAmt[i][j];
      arrPrincipalAmt[i][j] = temp1; 

      double temp2 = arrInterestRate[i][j];
      arrInterestRate[i][j] = arrInterestRate[i][j];
      arrInterestRate[i][j] = temp2; 

      double temp3 = arrTerm[i][j];
      arrTerm[i][j] = arrTerm[i][j];
      arrTerm[i][j] = temp3; 

      double temp4 = arrSimple[i][j];
      arrSimple[i][j] = arrSimple[i][j];
      arrSimple[i][j] = temp4;

      double temp5 = arrCompoundMonthly[i][j];
      arrCompoundMonthly[i][j] = arrCompoundMonthly[i][j];
      arrCompoundMonthly[i][j] = temp5; 

      double temp6 = arrCompoundDaily[i][j];
      arrCompoundDaily[i][j] = arrCompoundDaily[i][j];
      arrCompoundDaily[i][j] = temp6; 

      double temp7 = arrCompoundWeekly[i][j];
      arrCompoundWeekly[i][j] = arrCompoundWeekly[i][j];
      arrCompoundWeekly[i][j] = temp7; 
      }
      }
      } 
  }

  /** Display Interest **/
  public static void displayInterest(double[][] amt ,double[][] interest, double[][] term, double[][] simple, double[][] monthly, double[][] weekly, double[][] arrCompoundDaily, int count){
    int i=0;
    System.out.println("[Line #]   [Principal Amount]    [Interest Rate]    [Term]    [Simple Interest]    [Compound Monthly]    [Compound Weekly]    [Compound Daily]");
    do{
    System.out.print((i+1)+"                ");
    System.out.print(amt[i][i]+"                ");
    System.out.print(+interest[i][i]+"           ");
    System.out.print(+ term[i][i]+"           ");
    System.out.print(+simple[i][i]+"          ");
    System.out.print(+monthly[i][i]+"           ");
    System.out.print(+weekly[i][i]+"           ");
    System.out.println(+arrCompoundDaily[i][i]);
    i++;
  }while(i < count);
  }

  /**ask yes or no **/
  public static boolean askYesNo(String question) {
      Scanner input = new Scanner(System.in);
      String enteredText;
      boolean isAnswerValid;

      do{
          isAnswerValid = false;
          System.out.println(question);
          enteredText = input.nextLine();

          if (enteredText.length() > 0)
          {
              enteredText = enteredText.toUpperCase();

              if(enteredText.equals("YES") || enteredText.equals("Y") || enteredText.equals("NO") || enteredText.equals("N"))
              {
                  isAnswerValid = true;
              }
          }

          if(isAnswerValid == false)
          {
              System.out.println("Please enter 'Yes' or 'No'?");
          }

      } while(isAnswerValid == false);

      if(enteredText.equals("YES") || enteredText.equals("Y"))
      {
          return true;
      }

      return false;
  }

}
4

1 回答 1

0

您的代码看起来像是在尝试用 Java 编写 C。Java 是一种 OO 语言,如果您设计和编写程序以利用它,您将获得更大的成功。像这样跨多个数组“涂抹”的数据结构从根本上难以处理。

要解决此问题,您需要做的第一件事是创建一个表示数组中的条目的类。

试图在保留当前“模糊”数据结构设计的同时修复程序是......直言不讳......浪费时间。

于 2013-04-11T03:20:11.653 回答