Asterisk bar graph in Java

When I was learning Java, and one of my assignments was to create a program that generated a vertical bar graph of asterisks given user input. Found it so I figured I’d post it -nothing fancy, just something different

capture

///////////////////////////////////////////////////////////////////////////////
import java.io.*;
import java.util.Scanner;

class LabFour
{
	public static void main (String[] args)
	{
		int intBuff, numberOfValues;
		BarCharter theBarCharter;
		Scanner inputReader = new Scanner(System.in);

		System.out.print("How many values will you enter:");

		numberOfValues = inputReader.nextInt();

		theBarCharter = new BarCharter(numberOfValues);
		// Begin loop to input all user values
		for(int i = 0; i < numberOfValues; i++)
		{
			// Do, while loop to loop if erroneous input is detected
			do{
				System.out.print("Enter a number between 0 and 10 (inclusive): ");
				intBuff = inputReader.nextInt();
			} while(theBarCharter.addNumber(intBuff) == -1);
		}
		// Print the chart
		theBarCharter.printChart();
	}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
import java.util.ArrayList;
import java.io.*;
/*
	BarCharter - this class is used to create and print vertical asterisk 
	bar graph, given numbers passed in via the addNumber method, using the
	printChart method. */
public class BarCharter
{
	// ArrayList to hold the user input values
	private ArrayList userInput;
	private int numberOfValues, largestValue;
	// Constructor initializes the object with the passed number of values
	// from main.
	BarCharter(int passedValue)
	{
		userInput = new ArrayList();
		numberOfValues = passedValue;
		largestValue = 0;
	}

	public int addNumber(int passedInt)
	{
		int returnVal = 0;
		// If it meets the criterion for a number
		if(passedInt >= 0 && passedInt <= 10) { userInput.add(passedInt); if(passedInt > largestValue)
			{
				largestValue = passedInt;
			}
		}
		// Else, it doesn't, set return val -1
		else
		{
			System.out.println("Invalid value. Try again.");
			returnVal = -1;
		}
		// Single entry, single exit, hence the variable
		return returnVal;
	}

	public void printChart()
	{
		// Set a loop against the largest value, to print all asterisks
		for(int i = largestValue; i > 0; i--)
		{
			// Begin incrementing through array list
			for(int k = 0; k < numberOfValues; k++)
			{
				// If the current element has a value equal to the outer loop
				if(userInput.get(k) == i)
				{
					// That means that a asterisk is to be printed here
					System.out.print("*");
					// Decrement, so the next time the outer loop 
					// decrements it will be cohesive
					userInput.set(k, userInput.get(k) - 1);
				}
				else
				{
					// Else, we know it is a space
					System.out.print(" ");
				}
			}
			// Drop a line to continue
			System.out.println();
		}
	}
}

///////////////////////////////////////////////////////////////////////////////

Leave a Reply

Your email address will not be published. Required fields are marked *