Learning Java Book

THIS BOOK IS STILL IN BETA STATE.

If you’re interested in becoming a beta tester, please email me at adam@pragmaticways.com to request a free copy.

Day 1 Exercises

Hello World Program

public class LearningJava {
  public static void main(String[] args) {
    System.out.println("Hello World");
  } 
}

Greet My Friend Program

import java.util.Scanner;

public class GreetMyFriend {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.println("What is your first name? ");
    String firstName = input.nextLine();

    System.out.println("What is your last name? ");
    String lastName = input.nextLine();

    System.out.println("What is your street address? ");
    String address = input.nextLine();

    System.out.println("What city do you live in? ");
    String city = input.nextLine();

    System.out.println("What state do you live in? ");
    String state = input.nextLine();

    System.out.println("What is your favorite color? ");
    String favoriteColor = input.nextLine();

    System.out.println("What is your favorite food? ");
    String favoriteFood = input.nextLine();

    System.out.println("What is your third favorite dinosaur? ");
    String thirdFavoriteDinosaur = input.nextLine();

    System.out.println("First Name: " + firstName);
    System.out.println("Last Name: " + lastName);
    System.out.println("Address: " + address);
    System.out.println("City: " + city);
    System.out.println("State: " + state);
    System.out.println("Favorite Color: " + favoriteColor);
    System.out.println("Favorite Food: " + favoriteFood);
    System.out.println("Third Favorite Dinosaur: " + thirdFavoriteDinosaur);
  }
}

Day 2 Exercises

import java.util.Scanner;
import java.util.Date;
import java.util.Calendar;
import java.text.DecimalFormat;

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

    Scanner input = new Scanner(System.in);
        
    System.out.println("What is your first name? ");
    String userFirstName = input.nextLine(); 
        
    System.out.println("What is your middle name? ");
    String userMiddleName = input.nextLine(); 
    char userMiddleInitial = userMiddleName.charAt(0);
        
    System.out.println("What is your last name? ");
    String userLastName = input.nextLine(); 
        
    System.out.println("What year were you born? ");
    int userBirthYear = input.nextInt();
        
    System.out.println("true or false: Your birthday already happened this year? ");
    boolean isPastBirthday = input.nextBoolean(); 
        
    System.out.println("How much money did you get for your birthday? ");
    double moneyReceivedOnBirthday = input.nextDouble();     
	        
    int userCurrentAge;

	Calendar calendar = Calendar.getInstance();
	calendar.setTime(new Date());
    int currentYear = calendar.get(Calendar.YEAR);

    if (isPastBirthday) {
      userCurrentAge = (currentYear - userBirthYear); 
    } else {
      userCurrentAge = (currentYear - userBirthYear) - 1;
    }

	DecimalFormat moneyFormat = new DecimalFormat("0.00"); 
        
    String message = 
        "Hello " + 
        userFirstName + " " + 
        userMiddleInitial + " " +
        userLastName + "! You are " + userCurrentAge +
        " years old right now. You received $" +
        moneyFormat.format(moneyReceivedOnBirthday) + " on your birthday. Congrats!";
            
    System.out.println(message);
  }
}

Unit Conversion Calculator

package com.company;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        boolean shouldRunProgram = true;
        while (shouldRunProgram) {
            runMainMenu();
            shouldRunProgram = askToRerunProgram();
        }
    }

    private static void runMainMenu() {
        String unitCategory = askForUnitCategory();
        String availableUnitsForCategory[] = getAvailableUnitsForCategory(unitCategory);
        String startingUnit = askForStartingUnit(unitCategory, availableUnitsForCategory);
        double amountOfStartingUnit = askForAmountOfStaringUnit(startingUnit);
        String endingUnit = askForEndingUnit(unitCategory, availableUnitsForCategory);
        double amountOfEndingUnit = convert(unitCategory, startingUnit, amountOfStartingUnit, endingUnit);
        printResults(startingUnit, amountOfStartingUnit, endingUnit, amountOfEndingUnit);
    }

    private static String askForUnitCategory() {
        String promptForUnitCategory = "\nWhat category of units do you need to convert?";
        String availableUnitCategories[] = {
                "LENGTH", "TIME", "TEMPERATURE", "MASS"
        };
        String unitCategory = askForOption(promptForUnitCategory, availableUnitCategories);
        return unitCategory;
    }

    private static String askForOption(String prompt, String[] options) { 
        boolean isValidChoice;
        String choice;
        do {
            System.out.print(prompt);
            System.out.println(" You can type: ");
            for (String option : options) {
                System.out.println(option);
            }
            System.out.print("Your choice: ");

            Scanner scanner = new Scanner(System.in);
            choice = scanner.nextLine().toUpperCase();

            isValidChoice = verifyChoiceIsValidOption(choice, options);
            if (!isValidChoice) {
                printInvalidOptionError();
            }
        } while (!isValidChoice);

        return choice;
    }

    private static boolean verifyChoiceIsValidOption(String choice, String[] options) {
        for (String option : options) {
            if (option.equals(choice)) {
                return true;
            }
        }
        return false;
    }

    private static String askForStartingUnit(String unitCategory, String[] availableUnitsForCategory) {
        String promptForStartingUnit = "\nWhat unit of " + unitCategory + " are you converting from?";
        String startingUnitType = askForOption(promptForStartingUnit, availableUnitsForCategory);
        return startingUnitType;
    }

    private static double askForAmountOfStaringUnit(String unit) {
        boolean isValidAmount;
        double amount = 0;
        do {
            System.out.print("\nEnter the amount of " + unit + " you need to convert from: ");
            Scanner scanner = new Scanner(System.in);
            try {
                amount = scanner.nextDouble();
                isValidAmount = true;

            } catch (InputMismatchException e) {
                System.out.print("\nPlease enter the number only.");
                isValidAmount = false;
            }
        } while (isValidAmount);

        return amount;
    }

    private static String askForEndingUnit(String unitCategory, String[] availableUnitsForCategory) {
        String promptForEndingUnit = "\nWhat unit of " + unitCategory + " do you need to convert to?";
        String startingUnitType = askForOption(promptForEndingUnit, availableUnitsForCategory);
        return startingUnitType;
    }

    private static String[] getAvailableUnitsForCategory(String unitCategory) {
        if (unitCategory.toUpperCase().equals("LENGTH")) {
            return getLengthUnits();

        } else if (unitCategory.toUpperCase().equals("TIME")) {
            return getTimeUnits();

        } else if (unitCategory.toUpperCase().equals("TEMPERATURE")) {
            return getTemperatureUnits();

        } else if (unitCategory.toUpperCase().equals("MASS")) {
            return getMassUnits();

        } else {
            printInvalidOptionError();
            return new String[] {};
        }
    }

    private static String[] getLengthUnits() {
        return new String[] {"METERS", "FEET"};
    }

    private static String[] getTimeUnits() {
        return new String[] {"SECONDS", "MINUTES"};
    }

    private static String[] getTemperatureUnits() {
        return new String[] {"CELSIUS", "FAHRENHEIT"};
    }

    private static String[] getMassUnits() {
        return new String[] {"KILOGRAMS", "POUNDS"};
    }

    private static double convert(String unitCategory, String startingUnit, double amountOfStartingUnit, String endingUnit) {
        switch (unitCategory) {
            case "LENGTH":
                return convertForLength(startingUnit, amountOfStartingUnit, endingUnit);

            case "TIME":
                return convertForTime(startingUnit, amountOfStartingUnit, endingUnit);

            case "TEMPERATURE":
                return convertForTemperature(startingUnit, amountOfStartingUnit, endingUnit);

            case "MASS":
                return convertForMass(startingUnit, amountOfStartingUnit, endingUnit);

            default:
                printInvalidOptionError();
                return 0;
        }
    }

    private static double convertForLength(String startingUnit, double amountOfStartingUnit, String endingUnit) {
        if (startingUnit.equals("METERS") && endingUnit.equals("FEET")) {
            return convertMetersToFeet(amountOfStartingUnit);

        } else if (startingUnit.equals("FEET") && endingUnit.equals("METERS")) {
            return convertFeetToMeters(amountOfStartingUnit);

        } else if (startingUnit.equals(endingUnit)) {
            return amountOfStartingUnit;

        } else {
            printInvalidOptionError();
            return 0;
        }
    }

    private final static double FEET_PER_METER = 3.281;
    private static double convertMetersToFeet(double meters) {
        return meters * FEET_PER_METER;
    }

    private static double convertFeetToMeters(double feet) {
        return feet / FEET_PER_METER;
    }

    private static double convertForTime(String startingUnit, double amountOfStartingUnit, String endingUnit) {
        if (startingUnit.equals("SECONDS") && endingUnit.equals("MINUTES")) {
            return convertSecondsToMinutes(amountOfStartingUnit);

        } else if (startingUnit.equals("MINUTES") && endingUnit.equals("SECONDS")) {
            return convertMinutesToSeconds(amountOfStartingUnit);
            
        } else if (startingUnit.equals(endingUnit)) {
            return amountOfStartingUnit;

        } else {
            printInvalidOptionError();
            return 0;
        }
    }

    private final static int SECONDS_PER_MINUTE = 60;
    private static double convertSecondsToMinutes(double seconds) {
        return seconds / SECONDS_PER_MINUTE;
    }

    private static double convertMinutesToSeconds(double minutes) {
        return minutes * SECONDS_PER_MINUTE;
    }

    private static double convertForTemperature(String startingUnit, double amountOfStartingUnit, String endingUnit) {
        if (startingUnit.equals("CELSIUS") && endingUnit.equals("FAHRENHEIT")) {
            return convertCelsiusToFahrenheit(amountOfStartingUnit);

        } else if (startingUnit.equals("FAHRENHEIT") && endingUnit.equals("CELSIUS")) {
            return convertFahrenheitToCelsius(amountOfStartingUnit);

        } else if (startingUnit.equals(endingUnit)) {
            return amountOfStartingUnit;

        } else {
            printInvalidOptionError();
            return 0;
        }
    }

    private static double convertCelsiusToFahrenheit(double celsius) {
        return (celsius * (9.0/5.0)) + 32;
    }

    private static double convertFahrenheitToCelsius(double fahrenheit) {
        return (fahrenheit - 32) * (5.0/9.0);
    }

    private static double convertForMass(String startingUnit, double amountOfStartingUnit, String endingUnit) {
        if (startingUnit.equals("KILOGRAMS") && endingUnit.equals("POUNDS")) {
            return convertKilogramsToPounds(amountOfStartingUnit);

        } else if (startingUnit.equals("POUNDS") && endingUnit.equals("KILOGRAMS")) {
            return convertPoundsToKilograms(amountOfStartingUnit);

        } else if (startingUnit.equals(endingUnit)) {
            return amountOfStartingUnit;

        } else {
            printInvalidOptionError();
            return 0;
        }
    }

    private final static double POUNDS_PER_KILOGRAM = 2.205;
    private static double convertKilogramsToPounds(double kilograms) {
        return kilograms / POUNDS_PER_KILOGRAM;
    }

    private static double convertPoundsToKilograms(double pounds) {
        return pounds * POUNDS_PER_KILOGRAM;
    }

    private static void printResults(String startingUnit, double amountOfStartingUnit, String endingUnit, double amountOfEndingUnit) {
        System.out.println("\nResult: " + amountOfStartingUnit + " " + startingUnit + " equals " +
                amountOfEndingUnit + " " + endingUnit);
    }

    private static boolean askToRerunProgram() {
        System.out.print("\nWould you like to run the Unit Conversion Calculator again? (Y/N): ");
        Scanner scanner = new Scanner(System.in);
        String userResponse = scanner.next().toUpperCase();
        return userResponse.equals("Y");
    }

    private static void printInvalidOptionError() {
        System.out.println("\nERROR!");
        System.out.println("An invalid option was selected. Please try again.");
    }
}