将单维数组转换为多维数组

时间:2013-04-08 00:12:59

标签: java arrays

我正在尝试将我的单维数组转换为多维数组[5] [7]。我知道我必须将我的方法sortBySimpleInterest和displayInterest转换为接受单个多维数组而不是多个单维数组。通过将这两个方法转换为多维数组,我还必须更改计算以接受多维数组吗?我也对如何使用选择排序设置SortbySimpleInterest方法感到困惑。感谢您的帮助,我是java的新手

    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[j]<arrSimple[i])
      {
      double temp = arrSimple[i];
      arrSimple[i] = arrSimple[j];
      arrSimple[j] = temp;

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

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

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

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

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

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

      double temp7 = arrCompoundDaily[i];
      arrCompoundDaily[i] = arrCompoundDaily[j];
      arrCompoundDaily[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]+"                ");
    System.out.print(+interest[i]+"           ");
    System.out.print(+ term[i]+"           ");
    System.out.print(+simple[i]+"          ");
    System.out.print(+monthly[i]+"           ");
    System.out.print(+weekly[i]+"           ");
    System.out.println(+arrCompoundDaily[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;
  }

}

1 个答案:

答案 0 :(得分:1)

如果您可以将某个计算方案映射到单个结构,那么简单的解决方案就是使用一个类。

class InterestRateSource {
    private Double firstFactor;
    private Double secondFactor;
    //etc

    public InterestRateSource(Double firstFactor, Double secondFactor) {
        this.firstFactor = firstFactor;
        this.secondFactor = secondFactor;
    };

    public Double getFirstFactor() {
        return this.firstFactor;
    };

    public Double getSecondFactor() {
        return this.secondFactor;
    };
};
// expand the above to account for all the variables of a single test case.
// Then simply use a List or whatever suitable collection.

    List<InterestRateSource> myList = new ArrayList<InterestRateSource>();
    myList.add(new InterestRateSource(5, 7));
    myList.add(new InterestRateSource(3,4));
    for (InterestRateSource currentRate: myList) {
       // now you are iterating through the list. Do whatever calculations you need to do.
    };