\documentclass[a4paper,11pt]{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{graphicx} \usepackage{xcolor} \renewcommand\familydefault{\sfdefault} \usepackage{tgheros} \usepackage[defaultmono]{droidsansmono} \usepackage{amsmath,amssymb,amsthm,textcomp} \usepackage{enumerate} \usepackage{multicol} \usepackage{tikz} \usepackage{geometry} \geometry{left=25mm,right=25mm,% bindingoffset=0mm, top=20mm,bottom=20mm} \linespread{1.3} \newcommand{\linia}{\rule{\linewidth}{0.5pt}} % custom theorems if needed \newtheoremstyle{mytheor} {1ex}{1ex}{\normalfont}{0pt}{\scshape}{.}{1ex} {{\thmname{#1 }}{\thmnumber{#2}}{\thmnote{ (#3)}}} \theoremstyle{mytheor} \newtheorem{defi}{Definition} % my own titles \makeatletter \renewcommand{\maketitle}{ \begin{center} \vspace{2ex} {\huge \textsc{\@title}} \vspace{1ex} \\ \linia\\ \@author \hfill \@date \vspace{4ex} \end{center} } \makeatother %%% % custom footers and headers \usepackage{fancyhdr} \pagestyle{fancy} \lhead{} \chead{} \rhead{} \lfoot{CSC 1109 Lab 4} \cfoot{} \rfoot{Page \thepage} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} % % code listing settings \usepackage{listings} \lstset{ language=java, basicstyle=\ttfamily\small, aboveskip={1.0\baselineskip}, belowskip={1.0\baselineskip}, columns=fixed, extendedchars=true, breaklines=true, tabsize=4, prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}, frame=lines, showtabs=false, showspaces=false, showstringspaces=false, keywordstyle=\color[rgb]{0.627,0.126,0.941}, commentstyle=\color[rgb]{0.133,0.545,0.133}, stringstyle=\color[rgb]{01,0,0}, numbers=left, numberstyle=\small, stepnumber=1, numbersep=10pt, captionpos=t, escapeinside={\%*}{*)} } %%%----------%%%----------%%%----------%%%----------%%% \begin{document} \title{CSC 1109 Lab 4} \author{Woon Jun Wei, 2200624} \date{\today} \maketitle \section*{Question 1} \textbf{Method assignments} I first instantiated 3 variables: `heightInInches`, `weightInPounds` and `bmi`. The constructor takes in 2 parameters, `heightInInches` and `weightInPounds` and assigns them to the corresponding variables.\\ The getters and setters are required to access the variables from outside the class, which was required for the `main` method in BMI\_Main.java.\\ \\ \textbf{calBMI()} The `calBMI` method takes in 2 parameters, `heightInInches` and `weightInPounds`. Using these variables, I first converted the \textbf{height} from inches to meters, using the formula `heightInMeters = heightInInches * 0.0254` where 0.0254 is given as the conversion ratio in the lab handout and I converted the \textbf{weight} from pounds to kilograms, using the formula `weightInKilograms = weightInPounds * 0.45359237` where 0.45359237 is given as the conversion ratio in the lab handout. I then calculated the \textbf{BMI} using the formula `bmi = weightInKilograms / (heightInMeters * heightInMeters)`.\\ \\ \textbf{BMIInterpretation()} The `BMIInterpretation` method takes in 1 parameter, `bmi` and returns a string based on the value of `bmi`.\\ The method checks against values in the table provided in the lab sheet and returns the corresponding string.\\ \pagebreak \begin{lstlisting}[label={list:BMI},caption=BMI.java] public class BMI { private double heightInInches; private double weightInPounds; private double bmi; public BMI(double heightInInches, double weightInPounds){ this.heightInInches = heightInInches; this.weightInPounds = weightInPounds; } public double getHeightInInches() { return this.heightInInches; } public double getWeightInPounds() { return this.weightInPounds; } public void setHeightInInches(double heightInInches) { this.heightInInches = heightInInches; } public void setWeightInPounds(double weightInPounds) { this.weightInPounds = weightInPounds; } public double calBMI(double heightInInches, double weightInPounds){ double heightInMeters = heightInInches * 0.0254; double weightInKilograms = weightInPounds * 0.45359237; this.bmi = weightInKilograms / (heightInMeters * heightInMeters); return this.bmi; } public void BMIInterpretation() { if (this.bmi < 18.5) { System.out.println("Underweight"); } else if (this.bmi >= 18.5 && this.bmi < 25) { System.out.println("Normal"); } else if (this.bmi >= 25 && this.bmi < 30) { System.out.println("Overweight"); } else if (this.bmi >= 30) { System.out.println("Obese"); } } } \end{lstlisting} \pagebreak \textbf{BMI\_Main.java} The `BMI\_Main` class uses the `BMI` class to calculate the BMI of a person. This is the main function that was used to access an use the `BMI` class.\\ Using a Scanner, I first got the hight and weight from the user, I then created a new `BMI` object and passed the height and weight to the constructor. I called the `calBMI` method and passed the height and weight to the method.\\ Lastly, the `BMIInterpretation` method was called to print the BMI interpretation. The input and output variables from the first output corresponds with the output from the lab sheet\\ \begin{lstlisting}[label={list:BMI_Main},caption=BMI\_Main.java] import java.util.Scanner; public class BMI_Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("Enter your weight in pounds: "); double weightInPounds = s.nextFloat(); System.out.print("Enter your height in inches: "); double heightInInches = s.nextFloat(); BMI bmi = new BMI(heightInInches, weightInPounds); System.out.println("BMI is " + bmi.calBMI(bmi.getHeightInInches(), bmi.getWeightInPounds())); bmi.BMIInterpretation(); } } \end{lstlisting} \begin{lstlisting}[label={list:BMI_Output},caption=BMI\_Main.java Output] //Output 1 Enter your weight in pounds: 146 Enter your height in inches: 70 BMI is 20.948603801493316 Normal //Output 2 Enter your weight in pounds: 150 Enter your height in inches: 80 BMI is 16.478193272792794 Underweight \end{lstlisting} \pagebreak \section*{Question 2} \begin{lstlisting}[label={list:StackOfIntegers},caption=StackOfIntegers.java] public class StackOfIntegers { private int[] elements; private int size; public StackOfIntegers(){ this.elements = new int[16]; this.size = -1; } public StackOfIntegers(int capacity){ this.elements = new int[capacity]; this.size = -1; } public boolean empty(){ return size == -1; } public int peek(){ return elements[size - 1]; } public void push(int value){ this.size++; this.elements[size] = value; } public int pop(){ int value = elements[size]; this.size--; return value; } public int getSize(){ return size; } } \end{lstlisting} \pagebreak \begin{lstlisting}[label={list:TestStackOfIntegers},caption=TestStackOfIntegers.java] public class TestStackOfIntegers { public static void main(String[] args) { StackOfIntegers stack = new StackOfIntegers(); for (int i = 0; i < 10; i++) { stack.push(i); } while (!stack.empty()) { System.out.print(stack.pop() + " "); } } } \end{lstlisting} \begin{lstlisting}[label={list:StackOfIntegers},caption=TestStackOfIntegers.java Output] 9 8 7 6 5 4 3 2 1 0 \end{lstlisting} \end{document}