Java 102: Intro to Object-oriented
Programming in Java
Hands-on Exercises
Hands-on Exercise
Creating Objects
Exercise: Creating Objects
‱ Create a new Java project named Java102
‱ Create a new package named exercise.carfactory
‱ Create a class named Car in the exercise.carfactory
package
‱ Add color, make and model properties to the Car class
‱ Create a java program named CarFactory (in same
package) that creates two instances of the class Car,
changes their colors to Blue and Pink and prints a message
to the console
‱ Run the class CarFactory and observe the message in the
Console.
Solution: Creating Objects
package exercise.creatingobjects;
public class Car {
String make;
String model;
String color;
}
package exercise.creatingobjects;
public class CarFactory {
public static void main(String[] args) {
Car firstCar = new Car();
Car secondCar = new Car();
firstCar.color = "Blue";
secondCar.color = "Pink";
System.out.println("Just finished painting new cars");
}
}
Car.java
CarFactory.java
Hands-on Exercise
Working with Methods
Exercise: Working with Methods
‱ What happens when you compile and run the
following code?
public class Cubes {
static int cube (int i){
int j = i * i * i;
return j;
}
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
for (int i=0 ;i<= N; i++) {
System.out.println(i + " " + cube(i));
}
}
}
Solution: Working with Methods
public class Cubes {
static int cube (int i){
int j = i * i * i;
return j;
}
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
for (int i=0 ;i<= N; i++) {
System.out.println(i + " " + cube(i));
}
}
}
% java Cubes 6
0 0
1 1
2 8
3 27
4 64
5 125
6 216
Hands-on Exercise
Method Overloading
Exercise : Method Overloading
‱ Create a new package named exercise.methodoverloading
‱ Create a BasicRateTax class with a method calcTax() that returns 20% of a fixed
base income of ÂŁ1000
‱ Create a java program named TaxCollector that creates a new BasicRateTax object,
calls the calcTax() method and prints the output to the console
‱ Run the TaxCollector program and ensure it always prints 200.00 as calculated tax
‱ Add new calcTax() method to BasicRateTax class that takes a double grossIncome
parameter and calculates the tax as 20% of the grossIncome if it’s greater than the
base income of ÂŁ1000
‱ Change the TaxCollector program to call the new calcTax(double grossIncome)
method and passing the gross Income value from the command line
‱ Run the TaxCollector program and see if the tax is correctly calculated.
‱ Re-run the program with different Gross Income values and check the output
Solution: Method Overloading
package exercise.methodoverloading;
public class BasicRateTax {
private static final double BASE_INCOME = 1000.00;
private static final double BASIC_TAX_RATE = 0.20;
public double calcTax (){
return BASE_INCOME * BASIC_TAX_RATE;
}
public double calcTax(double grossIncome){
if (grossIncome < BASE_INCOME){
return calcTax();
}
return grossIncome * BASIC_TAX_RATE;
}
}
Solution: Method Overloading
package exercise.methodoverloading;
public class TaxCollector {
public static void main(String[] args) {
double grossIncome = Double.parseDouble(args[0]);
BasicRateTax taxCalculator = new BasicRateTax();
double tax = taxCalculator.calcTax(grossIncome);
System.out.println("Tax due is " + tax);
}
}
% java TaxCollector 2000
Tax due is 400.0
% java TaxCollector 10000
Tax due is 2000.0
Hands-on Exercise
Inheritance
Exercise: Inheritance
‱ Create a new package named exercise.inheritance
‱ Create a class named HigherRateTax in the exercise.inheritance package that
extends BasicRateTax and add an empty calcTax(double grossIncome) method
‱ Add the code to HigherRateTax.calcTax(double grossIncome) method to calculate
the tax as follows:
– 20% of grossIncome if up to £34,000 (hint: reuse the BasicRateTax.calcTax(double
grossIncom) method)
– 40% of grossIncome if above £34,000 but less than £150,000
– 50% of grossIncome if £150,000 or above
‱ Run the existing TaxCollector program with some large gross income amounts and
observe that your changes didn’t have any effect on the calculate tax. Why?
‱ Change the code of the TaxCollector to instantiate HigherRateTax instead of
BasicRateTax
‱ Run the TaxCollector program again and observe that now the new percentage is
properly applied. You are now using the overridden version of the method
calcTax().
Solution: Inheritance
package exercise.inheritance;
import exercise.methodoverloading.BasicRateTax;
public class HigherRateTax extends BasicRateTax {
public double calcTax(double grossIncome){
double tax = 0.0;
if (grossIncome <=34000.00){
tax = super.calcTax(grossIncome);
}else if (grossIncome > 34000 && grossIncome <=150000) {
tax = grossIncome * 0.40;
}else if (grossIncome > 150000){
tax = grossIncome * 0.50;
}
return tax;
}
}
Solution: Inheritance
package exercise.methodoverloading;
import exercise.inheritance.HigherRateTax;
public class TaxCollector {
public static void main(String[] args) {
double grossIncome = Double.parseDouble(args[0]);
BasicRateTax taxCalculator = new HigherRateTax ();
double tax = taxCalculator.calcTax(grossIncome);
System.out.println("Tax due is " + tax);
}
}
% java TaxCollector 51000
Tax due is 20400.0
% java TaxCollector 32000
Tax due is 6400.0
% java TaxCollector 155000
Tax due is 77500.0
Hands-on Exercise
Using a Java Library
Exercise: Using Libraries
‱ Create a new package named exercise.libraryclient
‱ Create a class named CardDealer with an empty
deal() method that takes no arguments and returns
a String
‱ Implement the card dealer to use the StdRandom
library to deal playing cards ramdomly from an
infinite deck of cards
‱ Create a CardDealerTest program to test the
CardDealer class
Exercise: Using the StdRandom Library
public class CardDealer {
private static final String[] SUITES = { "D", "H", "C", "S"
};
private static final int TOTAL_CARDS_PER_SUITE = 13;
public String deal() {
// select a random suite
String suite = SUITES[StdRandom.uniform(SUITES.length)];
// select a random rank
int rank = StdRandom.uniform (TOTAL_CARDS_PER_SUITE ) +
1;
String card = rank + suite;
// return the dealt card
return card;
}
}
Testing the CardDealer Program
public class CardDealerTest {
public static void main(String[] args) {
CardDealer dealer = new CardDealer();
for (int i=0;i<5;i++){
String card = dealer.deal();
System.out.println( “ Card “ + i + “ is “ + card);
}
}
}

Java 102 intro to object-oriented programming in java - exercises

  • 1.
    Java 102: Introto Object-oriented Programming in Java Hands-on Exercises
  • 2.
  • 3.
    Exercise: Creating Objects ‱Create a new Java project named Java102 ‱ Create a new package named exercise.carfactory ‱ Create a class named Car in the exercise.carfactory package ‱ Add color, make and model properties to the Car class ‱ Create a java program named CarFactory (in same package) that creates two instances of the class Car, changes their colors to Blue and Pink and prints a message to the console ‱ Run the class CarFactory and observe the message in the Console.
  • 4.
    Solution: Creating Objects packageexercise.creatingobjects; public class Car { String make; String model; String color; } package exercise.creatingobjects; public class CarFactory { public static void main(String[] args) { Car firstCar = new Car(); Car secondCar = new Car(); firstCar.color = "Blue"; secondCar.color = "Pink"; System.out.println("Just finished painting new cars"); } } Car.java CarFactory.java
  • 5.
  • 6.
    Exercise: Working withMethods ‱ What happens when you compile and run the following code? public class Cubes { static int cube (int i){ int j = i * i * i; return j; } public static void main(String[] args) { int N = Integer.parseInt(args[0]); for (int i=0 ;i<= N; i++) { System.out.println(i + " " + cube(i)); } } }
  • 7.
    Solution: Working withMethods public class Cubes { static int cube (int i){ int j = i * i * i; return j; } public static void main(String[] args) { int N = Integer.parseInt(args[0]); for (int i=0 ;i<= N; i++) { System.out.println(i + " " + cube(i)); } } } % java Cubes 6 0 0 1 1 2 8 3 27 4 64 5 125 6 216
  • 8.
  • 9.
    Exercise : MethodOverloading ‱ Create a new package named exercise.methodoverloading ‱ Create a BasicRateTax class with a method calcTax() that returns 20% of a fixed base income of £1000 ‱ Create a java program named TaxCollector that creates a new BasicRateTax object, calls the calcTax() method and prints the output to the console ‱ Run the TaxCollector program and ensure it always prints 200.00 as calculated tax ‱ Add new calcTax() method to BasicRateTax class that takes a double grossIncome parameter and calculates the tax as 20% of the grossIncome if it’s greater than the base income of £1000 ‱ Change the TaxCollector program to call the new calcTax(double grossIncome) method and passing the gross Income value from the command line ‱ Run the TaxCollector program and see if the tax is correctly calculated. ‱ Re-run the program with different Gross Income values and check the output
  • 10.
    Solution: Method Overloading packageexercise.methodoverloading; public class BasicRateTax { private static final double BASE_INCOME = 1000.00; private static final double BASIC_TAX_RATE = 0.20; public double calcTax (){ return BASE_INCOME * BASIC_TAX_RATE; } public double calcTax(double grossIncome){ if (grossIncome < BASE_INCOME){ return calcTax(); } return grossIncome * BASIC_TAX_RATE; } }
  • 11.
    Solution: Method Overloading packageexercise.methodoverloading; public class TaxCollector { public static void main(String[] args) { double grossIncome = Double.parseDouble(args[0]); BasicRateTax taxCalculator = new BasicRateTax(); double tax = taxCalculator.calcTax(grossIncome); System.out.println("Tax due is " + tax); } } % java TaxCollector 2000 Tax due is 400.0 % java TaxCollector 10000 Tax due is 2000.0
  • 12.
  • 13.
    Exercise: Inheritance ‱ Createa new package named exercise.inheritance ‱ Create a class named HigherRateTax in the exercise.inheritance package that extends BasicRateTax and add an empty calcTax(double grossIncome) method ‱ Add the code to HigherRateTax.calcTax(double grossIncome) method to calculate the tax as follows: – 20% of grossIncome if up to £34,000 (hint: reuse the BasicRateTax.calcTax(double grossIncom) method) – 40% of grossIncome if above £34,000 but less than £150,000 – 50% of grossIncome if £150,000 or above ‱ Run the existing TaxCollector program with some large gross income amounts and observe that your changes didn’t have any effect on the calculate tax. Why? ‱ Change the code of the TaxCollector to instantiate HigherRateTax instead of BasicRateTax ‱ Run the TaxCollector program again and observe that now the new percentage is properly applied. You are now using the overridden version of the method calcTax().
  • 14.
    Solution: Inheritance package exercise.inheritance; importexercise.methodoverloading.BasicRateTax; public class HigherRateTax extends BasicRateTax { public double calcTax(double grossIncome){ double tax = 0.0; if (grossIncome <=34000.00){ tax = super.calcTax(grossIncome); }else if (grossIncome > 34000 && grossIncome <=150000) { tax = grossIncome * 0.40; }else if (grossIncome > 150000){ tax = grossIncome * 0.50; } return tax; } }
  • 15.
    Solution: Inheritance package exercise.methodoverloading; importexercise.inheritance.HigherRateTax; public class TaxCollector { public static void main(String[] args) { double grossIncome = Double.parseDouble(args[0]); BasicRateTax taxCalculator = new HigherRateTax (); double tax = taxCalculator.calcTax(grossIncome); System.out.println("Tax due is " + tax); } } % java TaxCollector 51000 Tax due is 20400.0 % java TaxCollector 32000 Tax due is 6400.0 % java TaxCollector 155000 Tax due is 77500.0
  • 16.
  • 17.
    Exercise: Using Libraries ‱Create a new package named exercise.libraryclient ‱ Create a class named CardDealer with an empty deal() method that takes no arguments and returns a String ‱ Implement the card dealer to use the StdRandom library to deal playing cards ramdomly from an infinite deck of cards ‱ Create a CardDealerTest program to test the CardDealer class
  • 18.
    Exercise: Using theStdRandom Library public class CardDealer { private static final String[] SUITES = { "D", "H", "C", "S" }; private static final int TOTAL_CARDS_PER_SUITE = 13; public String deal() { // select a random suite String suite = SUITES[StdRandom.uniform(SUITES.length)]; // select a random rank int rank = StdRandom.uniform (TOTAL_CARDS_PER_SUITE ) + 1; String card = rank + suite; // return the dealt card return card; } }
  • 19.
    Testing the CardDealerProgram public class CardDealerTest { public static void main(String[] args) { CardDealer dealer = new CardDealer(); for (int i=0;i<5;i++){ String card = dealer.deal(); System.out.println( “ Card “ + i + “ is “ + card); } } }