examples / java / hello-world / free-paycheck-calculator

Free Paycheck Calculator

example java hello-world util

If you get paid every two weeks, every once in a while you’ll hit a month where you get three paychecks. If your budget assumes you only get two paychecks per month, then that third paycheck is basically free money!

(Disclaimer: it is not free money.)

This program takes your next paycheck date and calculates the next 10 months that you’ll get a third paycheck.

import java.time.LocalDate;
import java.time.Year;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class FreePaycheckCalculator{

	public static void main(String... args){
		
		//get paycheck date from user
		System.out.println("When is your next paycheck? Example: March 14");
		Scanner scanner = new Scanner(System.in);
		String userString = scanner.nextLine();
		scanner.close();
		
		//parser needs year, try current year first
		String year = Year.now().toString();
		userString += " " + year;
		
		//convert input String to LocalDate
		DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MMMM d yyyy");
		LocalDate userDate = LocalDate.parse(userString, inputFormat);
		
		//if the user's date is before current date, that means it's next year
		LocalDate now = LocalDate.now();
		if(userDate.compareTo(now) < 0){
			userDate = userDate.plusYears(1);	
		}
		
		System.out.println("Here are the months you'll get a free paycheck:");
		
		DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MMMM yyyy");
		
		//find 10 months with 3 paychecks in them
		int freePaychecksFound = 0;
		int currentMonth = userDate.getMonthValue();
		int paychecksThisMonth = 1;
		while(freePaychecksFound < 10){
			userDate = userDate.plusWeeks(2);
			//if we're still in the same month, add the paycheck to the count
			if(userDate.getMonthValue() == currentMonth){
				paychecksThisMonth++;
				//if we found 3 paychecks this month, it's a free one!
				if(paychecksThisMonth == 3){
					freePaychecksFound++;
					System.out.println(outputFormat.format(userDate));
				}
			}
			//otherwise we're in the next month, reset the count
			else{
				paychecksThisMonth = 1;
				currentMonth = userDate.getMonthValue();
			}
		} //end while
	} //end main
}

The code uses the LocalDate and DateTimeFormatter classes to get the user’s next paycheck date. Then it adds 2 weeks to the date until it finds 3 paychecks in the same month. It keeps doing that until it finds 10 months that have three paychecks in it.

> javac FreePaycheckCalculator.java
> java FreePaycheckCalculator
When is your next paycheck? Example: March 14
May 19
Here are the months you'll get a free paycheck:
June 2017
December 2017
June 2018
November 2018
May 2019
November 2019
May 2020
October 2020
April 2021
October 2021

Buy yourself something nice, or donate to the Processing Foundation!

Tweak Ideas

Go back up