Start Programming Today With These 21 Easy Java Projects for Beginners in 2022
How do you learn Java?
After you have some foundational knowledge, the best thing to do is just jump in with Java projects for beginners. Java is a complex language, but you can hit the ground running very fast. The more you do, the more you’ll know.
Let’s take a look at some of the best Java projects for beginners. Add these projects to your Github, and you’ll have a Java programming portfolio in the making.
1. Develop your own currency converter
This is one of the best Java project ideas to start with, because it’s pretty simple. A currency converter just needs three inputs: the amount, the original currency, and the currency you’re trying to convert to. From there, everything is in the back-end. (You’ll have to write the conversion rates on your own.)
Last Updated September 2023
Learn Java In This Course And Become a Computer Programmer. Obtain valuable Core Java Skills And Java Certification | By Tim Buchalka, Tim Buchalka’s Learn Programming Academy
Explore CourseChallenge yourself
- Can you pull real-time data for the currency conversion?
- Could you display a currency conversion for multiple currencies?
- Could you add a fee, such as a percentage of each conversion?
package currencyConverter;
import java.util.ArrayList;
import java.util.HashMap;
public class Currency {
private String name;
private String shortName;
private HashMap<String, Double> exchangeValues = new HashMap<String, Double>();
// “Currency” Constructor
public Currency(String nameValue, String shortNameValue) {
this.name = nameValue;
this.shortName = shortNameValue;
}
// Getter for name
public String getName() {
return this.name;
}
// Setter for name
public void setName(String name) {
this.name = name;
}
// Getter for shortName
public String getShortName() {
return this.shortName;
}
// Setter for shortName
public void setShortName(String shortName) {
this.shortName = shortName;
}
// Getter for exchangeValues
public HashMap<String, Double> getExchangeValues() {
return this.exchangeValues;
}
// Setter for exchangeValues
public void setExchangeValues(String key, Double value) {
this.exchangeValues.put(key, value);
}
// Set default values for a currency
public void defaultValues() {
String currency = this.name;
switch (currency) {
case “US Dollar”:
this.exchangeValues.put(“USD”, 1.00);
this.exchangeValues.put(“EUR”, 0.93);
this.exchangeValues.put(“GBP”, 0.66);
this.exchangeValues.put(“CHF”, 1.01);
this.exchangeValues.put(“CNY”, 6.36);
this.exchangeValues.put(“JPY”, 123.54);
break;
case “Euro”:
this.exchangeValues.put(“USD”, 1.073);
this.exchangeValues.put(“EUR”, 1.00);
this.exchangeValues.put(“GBP”, 0.71);
this.exchangeValues.put(“CHF”, 1.08);
this.exchangeValues.put(“CNY”, 6.83);
this.exchangeValues.put(“JPY”, 132.57);
break;
case “British Pound”:
this.exchangeValues.put(“USD”, 1.51);
this.exchangeValues.put(“EUR”, 1.41);
this.exchangeValues.put(“GBP”, 1.00);
this.exchangeValues.put(“CHF”, 1.52);
this.exchangeValues.put(“CNY”, 9.60);
this.exchangeValues.put(“JPY”, 186.41);
break;
case “Swiss Franc”:
this.exchangeValues.put(“USD”, 0.99);
this.exchangeValues.put(“EUR”, 0.93);
this.exchangeValues.put(“GBP”, 0.66);
this.exchangeValues.put(“CHF”, 1.00);
this.exchangeValues.put(“CNY”, 6.33);
this.exchangeValues.put(“JPY”, 122.84);
break;
case “Chinese Yuan Renminbi”:
this.exchangeValues.put(“USD”, 0.16);
this.exchangeValues.put(“EUR”, 0.15);
this.exchangeValues.put(“GBP”, 0.11);
this.exchangeValues.put(“CHF”, 0.16);
this.exchangeValues.put(“CNY”, 1.00);
this.exchangeValues.put(“JPY”, 19.41);
break;
case “Japanese Yen”:
this.exchangeValues.put(“USD”, 0.008);
this.exchangeValues.put(“EUR”, 0.007);
this.exchangeValues.put(“GBP”, 0.005);
this.exchangeValues.put(“CHF”, 0.008);
this.exchangeValues.put(“CNY”, 0.051);
this.exchangeValues.put(“JPY”, 1.000);
break;
}
}
// Initialize currencies
public static ArrayList<Currency> init() {
ArrayList<Currency> currencies = new ArrayList<Currency>();
currencies.add( new Currency(“US Dollar”, “USD”) );
currencies.add( new Currency(“Euro”, “EUR”) );
currencies.add( new Currency(“British Pound”, “GBP”) );
currencies.add( new Currency(“Swiss Franc”, “CHF”) );
currencies.add( new Currency(“Chinese Yuan Renminbi”, “CNY”) );
currencies.add( new Currency(“Japanese Yen”, “JPY”) );
for (Integer i =0; i < currencies.size(); i++) {
currencies.get(i).defaultValues();
}
return currencies;
}
// Convert a currency to another
public static Double convert(Double amount, Double exchangeValue) {
Double price;
price = amount * exchangeValue;
price = Math.round(price * 100d) / 100d;
return price;
}
}
2. Try out a number guessing game
Games are a fun way to learn java. While you might not be able to create an adventure game out of whole cloth, you can get started with a number guessing game. This game generates a random number and lets the user select a guess. If you want to get more advanced, let the game give the user hints (“my number is more” or “my number is less”). You can also give the user limited time or limited guesses.
Challenge yourself
- Create multiple difficulties of the number guessing game.
- Add hints for your number guessing game.
- Add a high score panel!
/*Programmer: Christopher Guzman
Program Purpose: <Number Guessing Game2>
Project: IT106 Lab 6 Exercise 2
Date: November 28, 2012*/
//Imports//
import java.util.Scanner;
import java.util.Random;
public class guessingGame2
{
static int numRandom()//custom function numRandom()
{
Random generator=new Random();
int numRandom=generator.nextInt(100)+1;
return numRandom;
}
public static void main(String[] str)
{
//Variable Declaration//
int numRandom;
int numGuess1;
int numGuess2;
int numGuess3;
String display1=” !!!You guessed it right!!!”;
String display2=” !!!Sorry, that is not correct!!!”;
String display3=” The correct number is “;
String greeting1=” !!!Welcome to the Guessing Game!!!”;
String greeting2=” !!!Where you get 3 chances to guess a number from 1 to 100 and see if you’re right!!!”;
String prompt1=” Would you like to play?”;
String choice1=” 1. Yes”;
String choice2=” 2. No”;
String prompt2=” Please enter a number 1 to 100: “;
String second=” Please enter your second quess: “;
String last=” Please enter your final guess: “;
String prompt3=” Would you like to play again?”;
String goodbye1=” !!!Goodbye!!!”;
String goodbye2=” !!! Thanks for playing!!!”;
int reply=0;
//Scanner object//
Scanner keyboard=new Scanner(System.in);
//Main Program//
System.out.println(greeting1);
System.out.println(“”);
System.out.println(greeting2);
System.out.println(“”);
System.out.println(prompt1);System.out.println(choice1);System.out.println(choice2);
reply = keyboard.nextInt();
//Begin while loop//
while (reply==1)
{
numRandom=numRandom();//calling for a random number.//
System.out.print(prompt2);
numGuess1=keyboard.nextInt();
System.out.println(“”);System.out.print(second);
numGuess2=keyboard.nextInt();
System.out.println(“”);System.out.print(last);
numGuess3=keyboard.nextInt();
if (numGuess1==numRandom||numGuess2==numRandom||numGuess3==numRandom) //if loop1//
{
System.out.println(“”);
System.out.println(display1);
System.out.println(“”);
}
else
{
System.out.println(“”);
System.out.println(display2);
System.out.println(“”);
System.out.println(display3+numRandom+”.”);
System.out.println(“”);
}
System.out.println(prompt3);
System.out.println(choice1);
System.out.println(choice2);
reply=keyboard.nextInt();
if (reply==2)
{
System.out.println(goodbye2);
}
}
while (reply==2)
for(;reply>=2;reply–)
{
System.out.println(goodbye1);
}
}
}
3. Build a “breakout” game
A “breakout” brick breaker game requires a little mathematics, which is what makes it great for practice projects. You will need to send a ball from the paddle up to the bricks. You will need to destroy every brick that gets hit, which involves something called “collision detection.” This is one of the quintessential Java programming tasks, and you can find a lot of code snippets to help you build it out.
Challenge yourself
- Build additional levels for your breakout game.
- Have a high score for your breakout game.
- Add more balls to add more challenge!
Github: Breakout (catstavi)
4. Make a simple calculator
A calculator lets you explore the functions of Java mathematics, such as exponents. Java developers work with mathematics quite a lot. You can create a simple calculator GUI that lets users type in or click on numbers and then presents their results. This also offers you the opportunity to experiment with developing a clean user interface.
Challenge yourself
- Create a history of previous entries, so you can look back on what you calculated.
- Add sounds and animations to your GUI for more tactile feedback.
- Consider adding a graphing calculator function.
/**
* @name Simple Java Calculator
* @package ph.calculator
* @file Main.java
* @author SORIA Pierre-Henry
* @email [email protected]
* @link http://github.com/pH-7
* @copyright Copyright Pierre-Henry SORIA, All Rights Reserved.
* @license Apache (http://www.apache.org/licenses/LICENSE-2.0)
*/
package simplejavacalculator;
import static java.lang.Double.NaN;
import static java.lang.Math.log;
import static java.lang.Math.log10;
import static java.lang.Math.pow;
public class Calculator {
public enum BiOperatorModes {
normal, add, minus, multiply, divide , xpowerofy
}
public enum MonoOperatorModes {
square, squareRoot, oneDividedBy, cos, sin, tan ,log , rate, abs
}
private Double num1, num2;
private BiOperatorModes mode = BiOperatorModes.normal;
private Double calculateBiImpl() {
if (mode == BiOperatorModes.normal) {
return num2;
}
if (mode == BiOperatorModes.add) {
if (num2 != 0) {
return num1 + num2;
}
return num1;
}
if (mode == BiOperatorModes.minus) {
return num1 – num2;
}
if (mode == BiOperatorModes.multiply) {
return num1 * num2;
}
if (mode == BiOperatorModes.divide) {
return num1 / num2;
}
if (mode == BiOperatorModes.xpowerofy) {
return pow(num1,num2);
}
// never reach
throw new Error();
}
public Double calculateBi(BiOperatorModes newMode, Double num) {
if (mode == BiOperatorModes.normal) {
num2 = 0.0;
num1 = num;
mode = newMode;
return NaN;
} else {
num2 = num;
num1 = calculateBiImpl();
mode = newMode;
return num1;
}
}
public Double calculateEqual(Double num) {
return calculateBi(BiOperatorModes.normal, num);
}
public Double reset() {
num2 = 0.0;
num1 = 0.0;
mode = BiOperatorModes.normal;
return NaN;
}
public Double calculateMono(MonoOperatorModes newMode, Double num) {
if (newMode == MonoOperatorModes.square) {
return num * num;
}
if (newMode == MonoOperatorModes.squareRoot) {
return Math.sqrt(num);
}
if (newMode == MonoOperatorModes.oneDividedBy) {
return 1 / num;
}
if (newMode == MonoOperatorModes.cos) {
return Math.cos(Math.toRadians(num));
}
if (newMode == MonoOperatorModes.sin) {
return Math.sin(Math.toRadians(num));
}
if (newMode == MonoOperatorModes.tan) {
if (num == 0 || num % 180 == 0) {
return 0.0;
}
if (num % 90 == 0 && num % 180 != 0) {
return NaN;
}
return Math.tan(Math.toRadians(num));
}
if (newMode == MonoOperatorModes.log) {
return log10(num);
}
if (newMode == MonoOperatorModes.rate) {
return num / 100;
}
if (newMode == MonoOperatorModes.abs){
return Math.abs(num);
}
// never reach
throw new Error();
}
}
5. Create a temperature converter
A temperature converter is another of the most basic projects for beginners. It’s very similar to a currency converter, but it’s even a little easier; you don’t have to look up all those currency conversions. A temperature converter will help you brush up on your GUI Java skills. You could have it display different icons for different weather. (20° F might be a winter image, for instance.)
Challenge yourself
- Ask the user’s location and pull up the temperature where they are.
- Let the user choose which temperatures they want to convert from.
- Change the color of the app based on the temperature given.
Github: temperature-converter
6. Develop the “Snake” game
Everyone with an old Nokia phone remembers the “Snake” game, and that makes it another great project for beginners. In the Snake game, you’ll have to detect whether the snake collides with itself. And the snake will need to get longer and longer. You can find the basics of this game everywhere, because it’s open source. The snake will keep getting faster and faster until the user loses!
Challenge yourself
- Can you create different levels of the Snake game?
- What about different types of snake (such as speed or width)?
- What is the “win” condition of your snake game?
Github: java-snake-game (janbodnar)
7. Create a checkbook balancing program
It might not be a full-fledged banking application, but it is useful! A checkbook balancing program is one of the best project ideas for beginners because it requires a little transactional mathematics and can be extended significantly. Enter in your deposits and your payments and see how much your ending balance is.
Challenge yourself
- Can you manage multiple bank accounts at once?
- Could you schedule payments at regular intervals, to show up only once the date has passed?
- What about a login system for your checkbook balancing program?
Github: checkbook (christiancho)
8. Build a “Pong” game
Pong is similar to Break Out, but there’s a difference: Usually there are two players. You can create a practice project that has either an automated second player or that allows another player to control the second paddle. As far as practice projects go, this is a fun one because it involves another person.
Challenge yourself
- Could you “sabotage” a second player’s paddle?
- Can you create an automated second player?
- Can you enhance that automated player’s difficulty level?
Github: Pong (mihneadb)
9. Design a “Flappy Bird” game
You probably remember the Flappy Bird game! And it’s actually one of the best project ideas for beginners because it’s so simple. You can create it in any object-oriented programming language. You begin with the bird, and the bird goes up when you press a key. Meanwhile, there are items at the bottom (and top) that can collide with the bird. You can even create web apps that mimic this behavior.
Challenge yourself
- Create different types of birds that fly in different ways.
- Develop additional “platform” levels.
- Add a mechanic, such as the ability to boost (faster) or limited fuel (resource management).
Github: FlappyBird (grantitus)
10. Make a billing and invoicing system
Like a checkbook, billing and invoicing is critical to everyday life. Develop a system where you can enter in a user ID and client ID and send out a bill or an invoice. Track the invoices within the system and make it possible to check them off when they’ve been paid. Your system will need to be able to support adding clients and invoices.
Challenge yourself
- Create a login system to secure and protect your invoicing system.
- Have your invoicing system generate an actual bill that you can print.
- Develop reporting for invoices that are 30 days or 90 days behind.
Github: Billing-System-Java- (jjilka)

11. Make an ATM interface
Here’s a fun GUI project: an ATM interface. Develop the interface of an ATM such that someone would enter their card number and their PIN. Add everything that they would do, such as withdraw money, deposit money, or just check their balance. It may seem strange, but this is everything you need to develop any GUI, whether it’s a video game or an email application.
Challenge yourself
- Can you verify the type of card, based on the card number?
- What about animations when they deposit or withdraw money?
- Can you track the balance of their bank account?
import java.util.*;//Scanner
import java.lang.*;
public class ATM{
public static void main(String[]args){
//init Scanner
Scanner sc = new Scanner(System.in);
//init bank
Bank theBank = new Bank(“State Bank Of India”);
//add user ,whichalso creates a savings account
User aUser = theBank.addUser(“Aarsh”,”Dhokai”,”1111″);
//add a checking account for our user
Account newAccount = new Account(“Checking”,aUser,theBank);
aUser.addAccount(newAccount);
theBank.addAccount(newAccount);
User curUser;
while (true){
//stay in the login prompt until successful login
curUser = ATM.mainMenuPrompt(theBank,sc);
//stay in main menu until user quits
ATM.printUserMenu(curUser,sc);
}
}
public static User mainMenuPrompt(Bank theBank,Scanner sc){
//init
String userID;
String pin;
User authUser;
//prompt the user for user id and pincombo until a correct one is reached
do{
System.out.println(“\n\nWelcome to “+theBank.getName()+”\n\n”);
System.out.print(“Enter User ID : “);
userID = sc.nextLine();
System.out.println();
System.out.print(“Enter Pin : “);
pin = sc.nextLine();
//try to get the user object corresponding to th ID and pin Combo
authUser = theBank.userLogin(userID,pin);
if(authUser == null){
System.out.println(“incorrect User ID/Pin, Please try again”);
}
}while(authUser==null);//continue login until successful login
return authUser;
}
public static void printUserMenu(User theUser,Scanner sc){
//print a summary of user’s account
theUser.printAccountSummary();
//init choice
int choice;
//user menu
do{
System.out.println(“Welcome “+theUser.getFirstName()+” What would you like to do”);
System.out.println(“1>Show Transaction History”);
System.out.println(“2>withdraw”);
System.out.println(“3>Deposite”);
System.out.println(“4>Transfer”);
System.out.println(“5>Quit”);
System.out.println();
System.out.println(“Enter Your Choice : “);
choice = sc.nextInt();
if(choice<1 || choice>5){
System.out.println(“Invalid Choice”+” Please choose between 1-5 “);
}
}while(choice<1 || choice>5);
//process the choice
switch(choice){
case 1:
ATM.showTransactionHistory(theUser,sc);
break;
case 2:
ATM.withdrawFunds(theUser,sc);
break;
case 3:
ATM.depositeFunds(theUser,sc);
break;
case 4:
ATM.transferFunds(theUser,sc);
break;
case 5:
//gobble up rest of previous input
sc.nextLine();
break;
}
//redisplay this menu unless user quit
if(choice != 5){
ATM.printUserMenu(theUser,sc);
}
}
public static void showTransactionHistory(User theUser,Scanner sc){
int theAct;
//get account whose history to look at
do{
System.out.printf(“Enter the number (1-%d) of the account\n”+” whose transaction you waant to see : “,theUser.numAccounts());
theAct = sc.nextInt()-1;
if(theAct < 0 || theAct >= theUser.numAccounts()){
System.out.println(“Invalid account. please try again…..”);
}
}while(theAct < 0 || theAct >= theUser.numAccounts());
//Print transaction history
theUser.printActTransHistory(theAct);
}
public static void transferFunds(User theUser,Scanner sc){
//intits
int fromAct;
int toAct;
double amount;
double actBal;
//get the account to transfer from
do{
System.out.printf(“Enter the number (1-%d) of the account\n”+”to transfer from:”,theUser.numAccounts());
fromAct = sc.nextInt()-1;
if(fromAct < 0 || fromAct >= theUser.numAccounts()){
System.out.println(“Invalid account. please try again…..”);
}
}while(fromAct < 0 || fromAct >= theUser.numAccounts());
actBal = theUser.getAccountBalance(fromAct);
//get the account to transfer to
do{
System.out.printf(“Enter the number (1-%d) of the account\n”+”to transfer to:”,theUser.numAccounts());
toAct = sc.nextInt()-1;
if(toAct < 0 || toAct >= theUser.numAccounts()){
System.out.println(“Invalid account. please try again…..”);
}
}while(toAct < 0 || toAct >= theUser.numAccounts());
//get the amount to traansfer
do{
System.out.println(“Enter the amount to transfer (max than $”+actBal+”) : $”);
amount = sc.nextDouble();
if(amount < 0){
System.out.println(“Amount must be greater than zero”);
}else if(amount > actBal){
System.out.println(“Amount must not be greater than \n”+”balance of $”+actBal);
}
}while(amount < 0 || amount>actBal);
//do the transfer
theUser.addActTransaction(fromAct,-1*amount,String.format(“Transfer to account “+theUser.getActUUID(toAct)));
theUser.addActTransaction(toAct,amount,String.format(“Transfer to account “+theUser.getActUUID(fromAct)));
}
public static void withdrawFunds(User theUser,Scanner sc){
int fromAct;
String memo;
double amount;
double actBal;
//get the account to transfer from
do{
System.out.printf(“Enter the number (1-%d) of the account\n”+”Where to withdraw :”,theUser.numAccounts());
fromAct = sc.nextInt()-1;
if(fromAct < 0 || fromAct >= theUser.numAccounts()){
System.out.println(“Invalid account. please try again…..”);
}
}while(fromAct < 0 || fromAct >= theUser.numAccounts());
actBal = theUser.getAccountBalance(fromAct);
//get the amount to traansfer
do{
System.out.println(“Enter the amount to withdraw (max $ “+actBal+”): $”);
amount = sc.nextDouble();
if(amount < 0){
System.out.println(“Amount must be greater than zero”);
}else if(amount > actBal){
System.out.println(“Amount must not be greater than \n”+”balance of $”+actBal);
}
}while(amount < 0 || amount>actBal);
//gobble up rest of previous input
sc.nextLine();
//get a memo
System.out.println(“Enter a memo: “);
memo = sc.nextLine();
//do withdrawal
theUser.addActTransaction(fromAct,-1*amount,memo);
}
public static void depositeFunds(User theUser,Scanner sc){
int toAct;
String memo;
double amount;
double actBal;
//get the account to transfer from
do{
System.out.printf(“Enter the number (1-%d) of the account\n”+”Where to Deposite:”,theUser.numAccounts());
toAct = sc.nextInt()-1;
if(toAct < 0 || toAct >= theUser.numAccounts()){
System.out.println(“Invalid account. please try again…..”);
}
}while(toAct < 0 || toAct >= theUser.numAccounts());
actBal = theUser.getAccountBalance(toAct);
//get the amount to transfer
do{
System.out.print(“Enter the amount to deposite (max than $”+actBal+”) :$”);
amount = sc.nextDouble();
if(amount < 0){
System.out.println(“Amount must be greater than zero”);
}
}while(amount < 0 );
//gobble up rest of previous input
sc.nextLine();
//get a memo
System.out.println(“Enter a memo: “);
memo = sc.nextLine();
//do withdrawal
theUser.addActTransaction(toAct,amount,memo);
}
}
12. Create a text-based adventure game
A text-based adventure game is an opportunity to dig into the console version of Java without having to get into a GUI at all. But you’ll still need to track quite a lot, like the state of the game, the player’s inventory, and the actions the player can take (and has taken). Developing a text-based adventure game can be a little difficult, but it’s mostly time-consuming. And at the end, you’ll have a full game!
Challenge yourself
- Make it possible for the player to save and restore in the game.
- Create additional verbs the player can use in the game (like “eat”).
- Track the actions the player takes, so they can “replay” the game.
Github: Jadventure (Progether)
13. Develop a “memory” game
Memory games are an interesting experiment in saving state. You will randomize the position of tiles (building a GUI for it) and then let the player turn over those tiles. The goal is for the player to be able to match all the tiles. As the tiles are matched, they are destroyed. Everyone knows how to play a memory game, so it’ll be a fun one for your friends to test.
Challenge Yourself
- Create additional levels with progressively more tiles.
- Build animations for the tiles that flip over and are destroyed.
- Add sounds to make your game “come to life.”
Github: MemoryGame (CodingGent)
14. Create a digital clock
When you’re first starting out with GUI management, you really want to start simple. A digital clock is perfect for that because it’s easy to create but it’s a little harder to make sophisticated. Create a digital clock that doesn’t just tell the time but changes as time progresses. You’ll just need to use Java’s time-based functions.
Challenge yourself
- Let the user select different “designs” or “skins” to alter the appearance of the clock.
- Animate the clock changing, so the change looks smoother.
- Allow for different time zone settings.
package GUITools;
import java.awt.*;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.*;
class DigitalClock{
public static final int TWELVE_HOUR = 12;
public static final int TWENTY_FOUR_HOUR = 24;
private int format = 24;
private boolean displaySeconds = true;
private boolean displaySecondTick = false;
public DigitalClock() {}
// get current time
public String timeNow() {
StringBuilder time = new StringBuilder();
String format = “”;
Calendar now = Calendar.getInstance();
int hrs = now.get(Calendar.HOUR_OF_DAY);
int min = now.get(Calendar.MINUTE);
int sec = now.get(Calendar.SECOND);
if(this.getFormat() == 12){
if(hrs > 12){
hrs = hrs – 12;
format = ” p.m.”;
}else{
format = ” a.m.”;
}
time.append(hrs + “:” + zero(min));
}else{
time.append(zero(hrs) + “:” + zero(min));
}
if(this.displaySeconds){
time.append(“:” + zero(sec));
}
if(((sec % 2) !=0) && this.displaySecondTick){
return time.append(format).toString().replace(“:”, ” “);
}else{
return time.append(format).toString();
}
}
public Long timeNowUnixtime(){
return ((new Date()).getTime()/1000);
}
public String zero(int num) {
String number = (num < 10) ? (“0” + num) : (“” + num);
return number; // Add leading zero if needed
}
@Override
public String toString() {
return timeNow();
}
public void disableSeconds(){
this.displaySeconds = false;
}
public void disableSecondTick(){
this.displaySecondTick = false;
}
public void enableSecondTick(){
this.displaySecondTick = true;
}
public void enableSeconds(){
this.displaySeconds = true;
}
public int getFormat() {
return format;
}
public void setFormat(int format) {
this.format = format;
}
}
15. Make a “quiz” game
A quiz game can give the user a sequence of questions, potentially each harder than the last. The user has to select the right answer, generally from a multiple choice array. The quiz game then assigns points for the ones the user has gotten correct. A quiz game can be about anything at all — and it can be fun to see the eventual results.
Challenge yourself
- Let the user select different types of quizzes.
- Have the quiz randomize itself and randomize the order of answers.
- Make it possible for the quiz to determine the difficulty of a question based on the number of correct answers.
Github: java-quiz (mikbergs)
16. Develop a reservation system
Let’s develop a reservation system. You can make it anything you want, like an airline reservation system. You will need to be able to book passengers on specific flights. You will also need to add specific flights. As the “booking agent,” you should be able to search for flights to put passengers on, and you should receive an alert when the flight is “full.”
Challenge yourself
- Add crew assignments to each flight, assuming each flight needs a pilot, co-pilot, and steward persons.
- Make sure passengers and crew aren’t “double-booked” and can’t go on the same flight at the same time.
- Add a seating chart that lets passengers select a seat on the plane.
Github: airlines-reservation-system
17. Create an email client
A full email application might be a little more advanced, but a general email client actually isn’t. It’s very easy to send and receive emails as long as you have access to an email server. Make it possible to type in an email address, subject, and body, and send that along from your email. This is the first step you’ll need for any type of email integration.
Challenge yourself
- How would you make this email client more secure? Think about authentication services.
- Can you get your email client to pull up a list of emails from your own inbox?
- How about a more advanced text editing system for your email client?
Github: java-email-client (tech-geek29)
18. Read an RSS feed
RSS feeds are a quick way to get the news. But how do you manage them? Create a system that will pull up a given RSS feed and read it for you. You will need to create a system that can read the RSS format and translate it into something that’s human-readable. This conversion process (and the import process) is valuable to learn.
Challenge yourself
- Can you have your system track multiple RSS feeds at the same time?
- What about a system that prompts you to give it an RSS feed to load?
- Try to make your RSS feed look professional and polished in the GUI.
Github: rssreader (w3stling)
19. Make a movie recommendation system
What do you want to watch next? It’s easy — let’s turn to Java! A movie recommendation system will store information about movies and recommend a movie to you based on the type of movie that you like. You can ask it for a comedy, a horror, or anything else that you program in, and the system will randomize an answer based on your preferences.
Challenge yourself
- Could you make a recommendation engine based purely on the previous movies that you liked?
- How many factors could you gauge each movie on?
- Add multiple user profiles to your app for different types of suggestions.
Github: Movie-Recommendation-System (NishantChaudary1)
20. Create a simple chat application
At the beginning of the web, chat applications were there — and they’re still one of the most popular apps today. Create a simple chat application, through which you can communicate with another user in real-time. This will test your ability to develop Java net code and web apps. Your application should let at least two people talk to each other.
Challenge yourself
- What would you need to do to create an entire chat room with multiple people?
- Consider letting them set their own icons or format their text.
- Add user profiles and authentication to ensure that their usernames are safe.
Github: java-chat-app
21. Make an inventory management system
It’s not just for business. Have you ever wondered what ingredients you have for dinner? Or what tea you have available for breakfast? An inventory management system can help you track books, movies, DVDs, and more. It’s a simple project, too: You just need to create a list of items and categorize them.
Challenge yourself
- Create a GUI for your inventory management system, so it’s easier to add items.
- Make multiple lists of items, so you can see your furniture, equipment, and so forth.
- Add values and create an “Insurance Report.”
Github: Easy-Inventory (achyutdev)
Finding more Java projects for beginners
Need more inspiration? You can take a look at some Java code examples — or just think about what you want to do. Java is one of the most robust, flexible languages available — if there’s something you can think of, Java can probably do it!
And if you need to brush up on Java and learn more about what you can do with it, you can take a class, go through a bootcamp, or just walk yourself through a few lessons. One of the principle advantages of learning Java is that it’s such an extraordinarily well-documented language — with many tutorials, videos, and code snippets available.
Recommended Articles
Top courses in Java
Java students also learn
Empower your team. Lead the industry.
Get a subscription to a library of online courses and digital learning tools for your organization with Udemy Business.