简体   繁体   中英

converting single dimensional array into multidimensional array

I'm trying to convert my single dimensional array into a multidimensional array. Convert the existing Interest Calculator Batch application from several single dimensional arrays into 1 multi-dimensional array. Use the following data type: double[][] values; Hint: The maximum number of data sets(5) will be your row and the each data array (from the original InterestCalculatorBatch)(7)will be a column. 2.All data will be contained within a single multi-dimensional array. 3. Modify the sortBySimple and displayInterest methods to accept a single multi-dimensional array instead of multiple single dimensional arrays

I fixed the displayInterest to accept a single multi dimensional array. I am just confused if I have the sortBySimple set up correctly and when the program calculates the interest if I need to fix those or keep them as is. Thank you for the help.

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;
  }

}

Your code looks like an attempt to write C in Java. Java is an OO language, and you will have much more success if you design and write your programs in to make use of that. Data structures that are "smeared" across multiple arrays like that are fundamentally awkward to deal with.

The first thing you need to do to remedy this is to create a class that represents an entry in the arrays.

Trying to fix the program while retaining the current "smeared" data structure design is ... to be blunt ... a waste of time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM