Unexpected type with arithmetic operators

not sure why this isn’t working. I know this is probably basic and I am pathetic at this but can anyone shed any light?

Code:

public class CarLoan {
    int carLoan;
    double interestRate;
    int lengthOfLoan;
    int downPayment;

  public CarLoan(int loanAmount, double intRate, int lol, int dp) {
    loanAmount = carLoan;
    intRate = interestRate;
    lol = lengthOfLoan;
    dp = downPayment;
  }

  public void totalLoan() {
    int totalLoan = (carLoan / interestRate) += carLoan;
    System.out.println("The total amount you have loaned is:" + totalLoan);
  }

  public static void main(String[] args) {
    CarLoan carL1 = new CarLoan(6500, 12.5, 3, 0);
    carL1.totalLoan();

    }
 }

I am getting the error:

CarLoan.java:15: error: unexpected type
int totalLoan = (carLoan / interestRate) += carLoan;
^
required: variable
found:    value
1 error

I tried a few things to rectify:

  1. Reversed the constructor and instance variables
  2. Defined the totalLoan method without a creating new variable (example: (carloan / interestRate) += carLoan)
  3. Tried introducing a "int" return type to the totalLoan method but I was working with a few varTypes.

>Solution :

Let’s break down the problems with the

int totalLoan = (carLoan / interestRate) += carLoan;

line. First of all, the += operator is adding and assigning to a variable. For example, if you have

foo += bar;

then the value of foo + bar is computed and the result is assigned to foo as its new value. However, your code assigns (carLoan / interestRate) to totalLoan, resulting in the expected value that is assigned and then you try to add carLoan to this value and assign to the value rather than the variable. Secondly, you are computing the division of an int and a double, which leads to data loss if you want to assign it to an int. A possible solution would be:

int totalLoan = (int) ((carLoan / interestRate) + carLoan);

or even:

int totalLoan = (int) ((carLoan * (1 + interestRate)) / interestRate);

Leave a Reply