website/content/ta/fall2017/cpsc220/sept11.md
2020-01-15 21:51:49 -05:00

4.7 KiB

CPSC 220 Lecture 4

Practice Problem

  1. Create a class called Car
    • Create a private variable of int type called year
    • Create a private variable of String type called make
  2. Create accessor methods for all data members.
  3. Create mutator methods for all data methods.
public class car { // begin car
  private int year;
  private String make;
  public int getYear(void) {
      return year;
  }
  public String getMake() {
      return make;
  }
  public void setYear(int y) {
    if (y > 1890) {
        year = y;
    } else {
        System.out.println(y + " is not a valid year.");
    }
  }
  public void setMake(String m) {
      make = m;
  }
}

Local variables are only existent within the curly braces that it is defined in.

If Statements and Boolean Expressions

Boolean expressions return a boolean

1 < 4; // 1 is less than 4: TRUE
3 > 5; // 3 is greater than 5: FALSE
5 == 5; // 5 is equal to 5: TRUE
5 != 5; // 5 is not equal to 5: FALSE
1 >= 1; // 1 is greater than or equal to 1: TRUE
5 <= 1; // 5 is less than or equal to 1: FALSE

If statements only occur if the boolean expression is true, otherwise the else block is executed.

if (true) {
  System.out.println("I am always printed");
} else {
  System.out.println("I am never printed");
}

You can only have one else per if. If you have an if you don't necessarily need an else

Local vs Class Variables

If you have a local variable and the class variable sharing the same name, then the local variable is always used first.

public class car { // begin car
    private int year;
  public void setYear(int year) {
     year = year;
  }
}

This is a redundant statement, it makes the argument that is passed in equal to itself.

To avoid this situation, use the keyword this to access the class variable

public class car { 
  private int year;  
  public void setYear(int year) {     
    this.year = year;  
  }
}

The code above runs as expected.

Rewriting our class with this

public class car { // begin car
  private int year;
  private String make;
  public int getYear(void) {
      return year;
  }
  public String getMake() {
      return make;
  }
  public void setYear(int year) {
    if (y > 1890) {
        this.year = year;
    } else {
        System.out.println(y + " is not a valid year.");
    }
  }
  public void setMake(String make) {
      this.make = make;
  }
}

Unreachable Code

When the code hits a return statement, it stops executing the rest of the code in the method. Also throws an Unreachable Code Error.

public int add(int x, int y) {
  return x + y;
  System.out.println("x + y = " + x + y);
}
add();
System.out.println("Hello");

Here the code above will not compile, though assuming the error doesn't exist then it would only print out "Hello"

Constructors

You cannot have a private or protected constructors.

Constructors are used to initialize your objects.

You want to have the class variables to the left of the assignment statement.

public class car {
  private int year;
  private String make;
  car() {
    year = 1890;
    make = "Ford";
  }
  car(int year, String make) {
    this.year = year;
    this.make = make;
  }
}

Testers

Testers are useful to check that the class is implemented correctly. Both the tester and the class have to be in the same folder/directory.

public class carTester {
  public static void main(String[] args) {
    Car myCar; // Declaration
    myCar = new Car(); // Initilization
    Car yourCar = new Car(2009, "Hyundai"); // Declaration + Initialization
  }
}

More about classes

public class Car {
  private String name;
  private int odometer;
  public void setOdometer(int od) {
    odometer = od;
  }
  public void setName(String n) {
      this.name = n;
  }
  public void changeOilRequest(String name, int od) {
    if (name == this.name) {
      int difference = od - this.odometer;
      if (difference > = 3000) {
        // You can call other methods in the class
        setOdo(od);  // Equivalent to "this.setOdo(od);"
        this.odometer = od;
        System.out.println("Ready for oil change.");
      } else {
        System.out.println(name + " not ready for oil change.")
      }
    } // end if
  } // end changeOil request
} // end class

To call public methods outside the class use the variable name to do so.

public class CarTester {
  public static void main(String[] args) {
    Car myCar = new Car();
    myCar.setName("Honda")
    myCar.changeOilRequest("Honda", 3400);
  }
}

Math library

The ceil method rounds up while the floor method runs down.

Math.ceil(3.2); // 4
Math.ceil(4.1); // 4