3

So, I'm having a very odd issue here. When I multiply the value user.salary by 1.1, for some reason it becomes 0! The original user.salary variable is fine, I confirmed that it is what it's supposed to be with a System.out.println.

import javax.swing.JOptionPane;


class Employee{
    String firstname;
    String lastname;
    double salary;
    Employee (String firstname, String lastname, double Salary){
        this.firstname = firstname;
        this.lastname = lastname;
        this.salary = salary;
    }

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public double getSalary() {
    return salary;
}

public void setSalary(double salary) {
    this.salary = salary;
}



}

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

String firstname = JOptionPane.showInputDialog("What is your first name?");
String lastname = JOptionPane.showInputDialog("What is your last name?");
String salarystring = JOptionPane.showInputDialog("What is your salary?");
Double salary = Double.parseDouble(salarystring);
Employee user = new Employee (firstname, lastname, salary);
String message = String.format("Hello, %s %s.", user.firstname, user.lastname);
JOptionPane.showMessageDialog(null, message);
double raise = (user.salary)*1.1;

JOptionPane.showMessageDialog(null, "Congratulations, you have received a raise! Your salary is now "+raise);
  } 
}
Blimeo
  • 295
  • 2
  • 3
  • 10

2 Answers2

9

Your constructor has a typo:

Employee (String firstname, String lastname, double Salary){

double salary should be lowercase. As it is this line:

this.salary = salary;

Does nothing as it is equivalent to this.salary = this.salary.

As soon as you change the parameter to be lowercase salary, it will assign the value you pass into the constructor to the salary field.

cowls
  • 24,013
  • 8
  • 48
  • 78
5

There seems to be a problem in your constructor:

Employee (String firstname, String lastname, double Salary){
    this.firstname = firstname;
    this.lastname = lastname;
    this.salary = salary; //You assign salary to itself, since the 
                          //parameter is Salary (with caps)
}

That way salary is not set and remains with the default value 0. The rest of the issue is just maths. Changing the line to this

 this.salary = Salary

will solve the issue, tough I suggest you use Java's naming convention and name the parameters starting in lowercase, like newSalary for example.

Fritz
  • 9,987
  • 4
  • 30
  • 49