// imports allow you to use code already written by others. It is good to explore and learn libraries. The names around the dots often give you a hint to the originator of the code.
import java.util.Scanner; //library for user input
import java.lang.Math; //library for random numbers
public class Menu {
// Instance Variables
public final String DEFAULT = "\u001B[0m"; // Default Terminal Color
public final String[][] COLORS = { // 2D Array of ANSI Terminal Colors
{"Default",DEFAULT},
{"Red", "\u001B[31m"},
{"Green", "\u001B[32m"},
{"Yellow", "\u001B[33m"},
{"Blue", "\u001B[34m"},
{"Purple", "\u001B[35m"},
{"Cyan", "\u001B[36m"},
{"White", "\u001B[37m"},
};
// 2D column location for data
public final int NAME = 0;
public final int ANSI = 1; // ANSI is the "standard" for terminal codes
// Constructor on this Object takes control of menu events and actions
public Menu() {
Scanner sc = new Scanner(System.in); // using Java Scanner Object
this.print(); // print Menu
boolean quit = false;
while (!quit) {
try { // scan for Input
int choice = sc.nextInt(); // using method from Java Scanner Object
System.out.print("" + choice + ": ");
quit = this.action(choice); // take action
} catch (Exception e) {
sc.nextLine(); // error: clear buffer
System.out.println(e + ": Not a number, try again.");
}
}
sc.close();
}
Scanner input = new Scanner(System.in);
Scanner inputStream = new Scanner(System.in);
String userInputStr;
int numofNum, userNum, fact, tempType;
double celcius, farenheit, kelvin, medianNum, sdNumber;
char endReply;
public static final String REPORT = "\nFactorial of ";
public static final String FCONVERT = "\nConverted to Farenheit: ";
public static final String KCONVERT = "\nConverted to Kelvin: ";
//median
public static double findMed(double arr[], int n)
{
// sort the array
Arrays.sort(arr);
// check for even case
if (n % 2 != 0)
{
return (double)arr[n / 2];
}
return (double)(arr[(n - 1) / 2] + arr[n / 2]) / 2.0;
}
//factorial
public static int findFact(int n)
{
int f = 1;
for (int i=1; i<n+1; i++)
{
f = f * i;
}
return f;
}
// standard deviation
public static double sdcalc (double[] numsSD) {
double sum = 0.0;
for (int i=0; i<numsSD.length; i++) {
sum += numsSD[i];
}
double average = sum/numsSD.length;
double sdsum = 0.0;
double standev = 0.0;
for (int j=0; j<numsSD.length; j++) {
sdsum += Math.pow(numsSD[j]-average, 2);
standev = Math.sqrt(sdsum/numsSD.length);
}
return standev;
}
// Print the menu options to Terminal
private void print() {
//System.out.println commands below is used to present a Menu to the user.
System.out.println("-------------------------\n");
System.out.println("Choose from these choices");
System.out.println("-------------------------\n");
System.out.println("1 - Factorial");
System.out.println("2 - Temperature Converter");
System.out.println("3 - Median");
System.out.println("4 - Number Sort");
System.out.println("5 - Standard Deviation");
System.out.println("0 - Quit");
System.out.println("-------------------------\n");
}
// Private method to perform action and return true if action is to quit/exit
private boolean action(int selection) {
boolean quit = false;
switch (selection) { // Switch or Switch/Case is Control Flow statement and is used to evaluate the user selection
case 0:
System.out.print("Goodbye, World!");
quit = true;
break;
case 1:
System.out.print("Factorial ");
System.out.print("\nInput an integer: ");
userInputStr = input.nextLine();
userNum = Integer.parseInt(userInputStr);
fact = findFact(userNum);
System.out.print(REPORT + userNum +" is "+fact);
break;
case 2:
// initialize variables
celcius = 0.;
farenheit = 0.;
kelvin = 0.;
System.out.print("This program converts degress in Celcius to Farenheit or Kelvin \n");
// get degress in celcius from user
System.out.print("\nTemperature in Celcius: ");
userInputStr = inputStream.nextLine();
celcius = Double.parseDouble(userInputStr);
System.out.print(celcius);
// input from user, what do they want to convert to
while(true)
{
System.out.print("\nConvert to (1)Farenheit or (2)Kelvin: ");
userInputStr = inputStream.nextLine();
tempType = Integer.parseInt(userInputStr);
if ((tempType == 1) || (tempType == 2))
{
break;
}
else
{
System.out.print(tempType);
System.out.println("\nPlease input either 1 or 2");
}
}
System.out.print(tempType);
//conversion
if (tempType == 1) //convert to farenheit
{
farenheit = (celcius*1.8)+32; //multiple by 1.8 and then add 32, result is a double
System.out.print(FCONVERT);
System.out.print(farenheit);
}
else //convert to kelvin
{
kelvin = celcius + 273.15; //add 273.15, result is a double
System.out.print(KCONVERT);
System.out.print(kelvin);
}
break;
case 3:
System.out.print("Median ");
System.out.print("\nhow many values would you like to input?");
userInputStr = inputStream.nextLine();
numofNum = Integer.parseInt(userInputStr);
double[] arr = new double [numofNum]; //creates array with doubles, numofNum number of values in the array
for (int i=0; i<numofNum; i++) //gets info from user for each spot in array
{
System.out.print("\nenter value: ");
userInputStr = inputStream.nextLine();
arr[i] = Double.parseDouble(userInputStr);
System.out.print(arr[i]);
}
int n = arr.length;
System.out.println("\nMedian: " + findMed(arr, n));
break;
case 4:
System.out.print("Number Sort ");
System.out.print("\nhow many values would you like to input?");
userInputStr = inputStream.nextLine();
numofNum = Integer.parseInt(userInputStr);
double[] arr2 = new double [numofNum]; //creates array with doubles, numofNum number of values in the array
for (int i=0; i<numofNum; i++) //gets info from user for each spot in array
{
System.out.print("\nenter value: ");
userInputStr = inputStream.nextLine();
arr2[i] = Double.parseDouble(userInputStr);
System.out.print(arr2[i]);
}
Arrays.sort(arr2); //sort array
System.out.println("\nSorted Numbers: ");
for (int i=0; i<numofNum; i++) //prints each spot in array
{
System.out.print(arr2[i]+ ", ");
}
break;
case 5:
System.out.print("Standard Deviation");
System.out.print("\nhow many values would you like to find the standard deviation of?");
userInputStr = input.nextLine();
numofNum = Integer.parseInt(userInputStr);
double[] numsSD = new double [numofNum]; //creates array with doubles, nomofNum number of values in the array
for (int i=0; i<numofNum; i++)
{
System.out.print("\nenter value:");
userInputStr = input.nextLine();
numsSD[i] = Double.parseDouble(userInputStr);
System.out.print(numsSD[i]);
}
sdNumber = sdcalc(numsSD);
System.out.print("\nthe standard deviation is " +sdNumber);
break;
default:
//Prints error message from console
System.out.print("Unexpected choice, try again.");
}
System.out.println(DEFAULT); // make sure to reset color and provide new line
return quit;
}
// Static driver/tester method
static public void main(String[] args) {
new Menu(); // starting Menu object
}
}
Menu.main(null);