| @ -0,0 +1,25 @@ | |||
| package uwstout.courses.cs144.examples; | |||
| import java.util.Scanner; | |||
| public class CheckIfLetter { | |||
| public static void main(String[] args) { | |||
| Scanner scan = new Scanner(System.in); | |||
| String input = scan.nextLine(); | |||
| char firstChar = input.charAt(0); | |||
| if ((firstChar >= 'a' && firstChar <= 'z') || (firstChar >= 'A' && firstChar <= 'Z')) { | |||
| System.out.printf("%s is a letter!", firstChar); | |||
| } else if (firstChar >= '0' && firstChar <= '9') { | |||
| System.out.printf("%s is a number!", firstChar); | |||
| } else { | |||
| System.out.printf("%s is of unknown type!", firstChar); | |||
| } | |||
| scan.close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,23 @@ | |||
| package uwstout.courses.cs144.examples; | |||
| import java.text.DecimalFormat; | |||
| import java.text.NumberFormat; | |||
| import java.util.Scanner; | |||
| public class Formatter { | |||
| public static void main(String[] args) { | |||
| Scanner scan = new Scanner(System.in); | |||
| System.out.print("Enter a value: "); | |||
| double val = scan.nextDouble(); | |||
| System.out.println(val); | |||
| System.out.println(NumberFormat.getCurrencyInstance().format(val)); | |||
| System.out.println(NumberFormat.getPercentInstance().format(val)); | |||
| System.out.println(new DecimalFormat("#,##0.000,0").format(val)); | |||
| scan.close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,33 @@ | |||
| package uwstout.courses.cs144.examples; | |||
| import java.util.Scanner; | |||
| public class SphereVolume { | |||
| /** | |||
| * Calculates the volume of a sphere given the radius. | |||
| * | |||
| * TESTS: | |||
| * | |||
| * TEST1IN: 1; TEST1OUT: 4.189 | |||
| * | |||
| * TEST2IN: -2, TEST2OUT: -33.510 | |||
| * | |||
| * TEST3IN: 0, TEST3OUT: 0.000 | |||
| * | |||
| * TEST4IN: 0.5, TEST4OUT: 0.524 | |||
| * | |||
| * @param args Command line arguments - not used | |||
| */ | |||
| public static void main(String[] args) { | |||
| Scanner scan = new Scanner(System.in); | |||
| System.out.print("Enter the radius of the sphere: "); | |||
| double radius = Math.abs(scan.nextDouble()); | |||
| double volume = (4.0 / 3.0) * Math.pow(radius, 3) * Math.PI; | |||
| System.out.printf("A sphere with radius %.2f has a volume of %.2f", radius, volume); | |||
| scan.close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,22 @@ | |||
| package uwstout.courses.cs144.examples; | |||
| import java.util.Scanner; | |||
| public class StringSplit { | |||
| public static void main(String[] args) { | |||
| Scanner scan = new Scanner(System.in); | |||
| String inputString = scan.nextLine().toLowerCase().strip(); | |||
| int splitAt = inputString.length() / 2; | |||
| String stringHalf1 = inputString.substring(0, splitAt); | |||
| String stringHalf2 = inputString.substring(splitAt, inputString.length()); | |||
| System.out.println(stringHalf1); | |||
| System.out.println(stringHalf2); | |||
| scan.close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <classpath> | |||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> | |||
| <attributes> | |||
| <attribute name="module" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="src" path="src"/> | |||
| <classpathentry kind="output" path="bin"/> | |||
| </classpath> | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <projectDescription> | |||
| <name>LAB-4</name> | |||
| <comment></comment> | |||
| <projects> | |||
| </projects> | |||
| <buildSpec> | |||
| <buildCommand> | |||
| <name>org.eclipse.jdt.core.javabuilder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| </buildSpec> | |||
| <natures> | |||
| <nature>org.eclipse.jdt.core.javanature</nature> | |||
| </natures> | |||
| </projectDescription> | |||
| @ -0,0 +1,9 @@ | |||
| /** | |||
| * | |||
| */ | |||
| /** | |||
| * @author brett | |||
| * | |||
| */ | |||
| module uwstout.courses.cs144 { | |||
| } | |||
| @ -0,0 +1,70 @@ | |||
| package uwstout.courses.cs144.labs.lab4; | |||
| import java.text.DecimalFormat; | |||
| /** | |||
| * An expression formatter | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.10 | |||
| * | |||
| */ | |||
| public class ExpFormat { | |||
| private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.##"); | |||
| private int x; | |||
| private int y; | |||
| private double result; | |||
| /** | |||
| * An expression formatter | |||
| * | |||
| * @param ix The X value | |||
| * @param iy The Y value | |||
| * @param iresult The result | |||
| */ | |||
| public ExpFormat(int ix, int iy, double iresult) { | |||
| x = ix; | |||
| y = iy; | |||
| result = iresult; | |||
| } | |||
| /** | |||
| * Get the X value of the expression | |||
| * | |||
| * @return The X value | |||
| */ | |||
| public int getX() { | |||
| return x; | |||
| } | |||
| /** | |||
| * Get the Y value of the expression | |||
| * | |||
| * @return The Y value | |||
| */ | |||
| public int getY() { | |||
| return y; | |||
| } | |||
| /** | |||
| * Get the result of the expression | |||
| * | |||
| * @return The result | |||
| */ | |||
| public double getResult() { | |||
| return result; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| String reString = ""; | |||
| reString += x + " * " + y + " + 2\n"; | |||
| reString += "----------\n"; | |||
| reString += x + "^2 + 1\n"; | |||
| reString += "= " + DECIMAL_FORMAT.format(result); | |||
| return reString; | |||
| } | |||
| } | |||
| @ -0,0 +1,51 @@ | |||
| package uwstout.courses.cs144.labs.lab4; | |||
| import java.util.Scanner; | |||
| /** | |||
| * Calculates (xy + 2)/(x^2 + 1) with the values entered by the end user. | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.10 | |||
| */ | |||
| public class Expression { | |||
| /** | |||
| * Calculates (xy + 2)/(x^2 + 1) with the values entered by the end user. It | |||
| * then prints out a formatted version of the expression and result | |||
| * | |||
| * TESTS | |||
| * | |||
| * IN1: [1, 1] OUT1: [1.5] | |||
| * | |||
| * IN2: [1, 0] OUT2: [1] | |||
| * | |||
| * IN3: [0, 1] OUT3: [2] | |||
| * | |||
| * IN4: [-1, -1] OUT4: [1.5] | |||
| * | |||
| * @param args Command line arguments, not used | |||
| */ | |||
| public static void main(String[] args) { | |||
| Scanner scan = new Scanner(System.in); | |||
| // Read Inputs | |||
| /// Read X | |||
| System.out.print("Enter the x value: "); | |||
| int x = scan.nextInt(); | |||
| /// Read Y | |||
| System.out.print("Enter the y value: "); | |||
| int y = scan.nextInt(); | |||
| // Calculate: (xy + 2)/(x^2 + 1) | |||
| double result = ((x * y) + 2) / (Math.pow(x, 2) + 1); | |||
| // Format & Print | |||
| ExpFormat ef = new ExpFormat(x, y, result); | |||
| System.out.println("\n" + ef); | |||
| scan.close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,68 @@ | |||
| package uwstout.courses.cs144.labs.lab4; | |||
| import java.text.NumberFormat; | |||
| import java.util.Scanner; | |||
| /** | |||
| * Calculates the fabrication cost for a number of units, the cost per unit, and | |||
| * a mark-up. This automatically includes a constant setup cost | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.10 | |||
| * | |||
| */ | |||
| public class FabricationCost { | |||
| private static final double SETUP_COST = 3575.95; | |||
| /** | |||
| * Calculates the fabrication cost for a number of units, the cost per unit, and | |||
| * a mark-up. This automatically includes a constant setup cost | |||
| * | |||
| * | |||
| * TESTS | |||
| * | |||
| * IN1: [5, 5.00, 0.5] OUT1: [5, $5.00, 50%, $3,613.45] | |||
| * | |||
| * IN2: [-1, -1.0, 0.0] OUT2: [1, $1.00, 0%, $3,756.95] | |||
| * | |||
| * IN3: [0, 0.0, 0.0] OUT3: [0, 0.00, 0%, $3,575.95] | |||
| * | |||
| * IN4: [10, 2.75, -0.15]: [10, $2.75, -15%, $3,599.32] | |||
| * | |||
| * @param args Command line arguments (not used) | |||
| */ | |||
| public static void main(String[] args) { | |||
| Scanner scan = new Scanner(System.in); | |||
| // Read Units | |||
| System.out.print("Enter the number of units: "); | |||
| int units = Math.abs(scan.nextInt()); | |||
| // Read Cost Per Unit | |||
| System.out.print("Enter the cost per unit: $"); | |||
| double costPerUnit = Math.abs(scan.nextDouble()); | |||
| // Red Percent Mark-up | |||
| System.out.print("Enter the percent markup: "); | |||
| double percentMarkup = scan.nextDouble(); | |||
| // Calculate | |||
| /// Initial calculation of units x cost per unit | |||
| double totalCost = units * costPerUnit; | |||
| /// Add the mark-up | |||
| totalCost += totalCost * percentMarkup; | |||
| /// Add the setup cost | |||
| totalCost += SETUP_COST; | |||
| // Output Units, Cost per unit, percent mark-up, and computed value | |||
| System.out.println("Units: " + units); | |||
| System.out.println("Cost Per: " + NumberFormat.getCurrencyInstance().format(costPerUnit)); | |||
| System.out.println("Markup: " + NumberFormat.getPercentInstance().format(percentMarkup)); | |||
| System.out.println("Total Cost: " + NumberFormat.getCurrencyInstance().format(totalCost)); | |||
| scan.close(); | |||
| } | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <classpath> | |||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> | |||
| <attributes> | |||
| <attribute name="module" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="src" path="src"/> | |||
| <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"> | |||
| <attributes> | |||
| <attribute name="module" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="output" path="bin"/> | |||
| </classpath> | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <projectDescription> | |||
| <name>LAB-5</name> | |||
| <comment></comment> | |||
| <projects> | |||
| </projects> | |||
| <buildSpec> | |||
| <buildCommand> | |||
| <name>org.eclipse.jdt.core.javabuilder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| </buildSpec> | |||
| <natures> | |||
| <nature>org.eclipse.jdt.core.javanature</nature> | |||
| </natures> | |||
| </projectDescription> | |||
| @ -0,0 +1,10 @@ | |||
| /** | |||
| * | |||
| */ | |||
| /** | |||
| * @author brett | |||
| * | |||
| */ | |||
| module uwstout.courses.cs144 { | |||
| requires junit; | |||
| } | |||
| @ -0,0 +1,109 @@ | |||
| package uwstout.courses.cs144.labs.lab5; | |||
| /** | |||
| * Represents a projectile being launched into the air at a specific velocity, | |||
| * and at a specific angle. Allows the user to calculate the distance traveled | |||
| * by the projectile at a particular time, as well as the maximum distance. | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.26 | |||
| */ | |||
| public class Projectile { | |||
| /** | |||
| * The acceleration due to gravity | |||
| */ | |||
| private static final double G = 9.8; | |||
| private static final int DEFAULT_ANGLE = 45; | |||
| private double velocity; | |||
| private int angle; | |||
| /** | |||
| * Constructs a new Projectile with a given velocity and angle. | |||
| * | |||
| * @param nvelocity The velocity of the projectile | |||
| * @param nangle The angle of the projectile | |||
| */ | |||
| public Projectile(double nvelocity, int nangle) { | |||
| velocity = nvelocity; | |||
| angle = nangle; | |||
| } | |||
| /** | |||
| * Constructs a new Projectile with a given velocity. Defaults angle to | |||
| * 45deg. | |||
| * | |||
| * @param nvelocity The velocity of the projectile | |||
| */ | |||
| public Projectile(double nvelocity) { | |||
| velocity = nvelocity; | |||
| angle = DEFAULT_ANGLE; | |||
| } | |||
| /** | |||
| * Constructs a new Projectile that is a copy of the specified Projectile. | |||
| * | |||
| * @param other The projectile that is being copied | |||
| */ | |||
| public Projectile(Projectile other) { | |||
| velocity = other.velocity; | |||
| angle = other.angle; | |||
| } | |||
| /** | |||
| * Calculates the distance traveled at a specified time. | |||
| * | |||
| * @param time The time (in seconds) | |||
| * @return The distance traveled | |||
| */ | |||
| public double getDistance(double time) { | |||
| return velocity * time * Math.cos(Math.toRadians(angle)); | |||
| } | |||
| /** | |||
| * Calculates the maximum distance the projectile may travel. | |||
| * | |||
| * @return The maximum distance | |||
| */ | |||
| public double getMaximumDistance() { | |||
| return (velocity * velocity / G) * Math.sin(2 * Math.toRadians(angle)); | |||
| } | |||
| /** | |||
| * Get the velocity of the projectile. | |||
| * | |||
| * @return The velocity of the projectile | |||
| */ | |||
| public double getVelocity() { | |||
| return velocity; | |||
| } | |||
| /** | |||
| * Get the angle of the projectile. | |||
| * | |||
| * @return The angle of the projectile | |||
| */ | |||
| public int getAngle() { | |||
| return angle; | |||
| } | |||
| /** | |||
| * Set the velocity of the projectile | |||
| * | |||
| * @param nvelocity The new velocity | |||
| */ | |||
| public void setVelocity(double nvelocity) { | |||
| velocity = nvelocity; | |||
| } | |||
| /** | |||
| * Set the angle of the projectile | |||
| * | |||
| * @param nangle The new angle | |||
| */ | |||
| public void setAngle(int nangle) { | |||
| angle = nangle; | |||
| } | |||
| } | |||
| @ -0,0 +1,106 @@ | |||
| package uwstout.courses.cs144.labs.lab5; | |||
| import static org.junit.Assert.assertEquals; | |||
| import org.junit.After; | |||
| import org.junit.Before; | |||
| import org.junit.Test; | |||
| /** | |||
| * Tests the Projectile class | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.26 | |||
| */ | |||
| public class ProjectileTest { | |||
| private static final double DELTA = 0.01; | |||
| private Projectile p1; | |||
| private Projectile p2; | |||
| private Projectile p3; | |||
| /** | |||
| * Sets the class up for testing | |||
| * | |||
| * @throws Exception | |||
| */ | |||
| @Before | |||
| public void setUp() throws Exception { | |||
| p1 = new Projectile(50.0, 31); | |||
| p2 = new Projectile(35.0); | |||
| p3 = new Projectile(p1); | |||
| } | |||
| /** | |||
| * Tears down the class from testing. | |||
| * | |||
| * @throws Exception | |||
| */ | |||
| @After | |||
| public void tearDown() throws Exception { | |||
| } | |||
| /** | |||
| * Tests the Projectile(double, int) constructor | |||
| */ | |||
| @Test | |||
| public void testProjectileDoubleInt() { | |||
| Projectile t1 = new Projectile(4.0, 20); | |||
| assertEquals(4.0, t1.getVelocity(), DELTA); | |||
| assertEquals(20, t1.getAngle()); | |||
| Projectile t2 = new Projectile(0.0, 0); | |||
| assertEquals(0.0, t2.getVelocity(), DELTA); | |||
| assertEquals(0, t2.getAngle()); | |||
| } | |||
| /** | |||
| * Tests the Projectile(double) constructor | |||
| */ | |||
| @Test | |||
| public void testProjectileDouble() { | |||
| Projectile t1 = new Projectile(1.0); | |||
| assertEquals(1.0, t1.getVelocity(), DELTA); | |||
| assertEquals(45, t1.getAngle()); | |||
| Projectile t2 = new Projectile(0.0); | |||
| assertEquals(0.0, t2.getVelocity(), DELTA); | |||
| assertEquals(45, t2.getAngle()); | |||
| } | |||
| /** | |||
| * Tests the Projectile(Projectile) constructor | |||
| */ | |||
| @Test | |||
| public void testProjectileProjectile() { | |||
| Projectile t1 = new Projectile(p1); | |||
| assertEquals(50.0, t1.getVelocity(), DELTA); | |||
| assertEquals(31, t1.getAngle()); | |||
| Projectile t2 = new Projectile(p2); | |||
| assertEquals(35.0, t2.getVelocity(), DELTA); | |||
| assertEquals(45, t2.getAngle()); | |||
| } | |||
| /** | |||
| * Tests the {@link Projectile#getDistance(double)} method | |||
| */ | |||
| @Test | |||
| public void testGetDistance() { | |||
| assertEquals(214.29, p1.getDistance(5), DELTA); | |||
| assertEquals(0, p2.getDistance(0), DELTA); | |||
| assertEquals(214.29, p3.getDistance(5), DELTA); | |||
| } | |||
| /** | |||
| * Tests the {@link Projectile#getMaximumDistance()} method | |||
| */ | |||
| @Test | |||
| public void testGetMaximumDistance() { | |||
| assertEquals(225.24, p1.getMaximumDistance(), DELTA); | |||
| assertEquals(125, p2.getMaximumDistance(), DELTA); | |||
| assertEquals(225.24, p3.getMaximumDistance(), DELTA); | |||
| } | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <classpath> | |||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> | |||
| <attributes> | |||
| <attribute name="module" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="src" path="src"/> | |||
| <classpathentry kind="output" path="bin"/> | |||
| </classpath> | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <projectDescription> | |||
| <name>OCT-6-Debugging</name> | |||
| <comment></comment> | |||
| <projects> | |||
| </projects> | |||
| <buildSpec> | |||
| <buildCommand> | |||
| <name>org.eclipse.jdt.core.javabuilder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| </buildSpec> | |||
| <natures> | |||
| <nature>org.eclipse.jdt.core.javanature</nature> | |||
| </natures> | |||
| </projectDescription> | |||
| @ -0,0 +1,9 @@ | |||
| /** | |||
| * | |||
| */ | |||
| /** | |||
| * @author brett | |||
| * | |||
| */ | |||
| module oct2_debug { | |||
| } | |||
| @ -0,0 +1,72 @@ | |||
| package uwstout.courses.cs144.examples.debug; | |||
| /** | |||
| * Calculates the slope of a line through two points. | |||
| * | |||
| * @author Turner | |||
| * @version 1.0 | |||
| */ | |||
| public class Slope { | |||
| private double slope; | |||
| /** | |||
| * Calculates the slope using two points. | |||
| * | |||
| * @param x1 First x coordinate | |||
| * @param y1 First y coordinate | |||
| * @param x2 Second x coordinate | |||
| * @param y2 Second y coordinate | |||
| */ | |||
| public void setSlope(int x1, int y1, int x2, int y2) { | |||
| int rise; | |||
| int run; | |||
| rise = y2 - y1; | |||
| run = x2 - x1; | |||
| slope = (double) rise / run; | |||
| } | |||
| /** | |||
| * Gets the slope | |||
| * | |||
| * @return The slope | |||
| */ | |||
| public double getSlope() { | |||
| return slope; | |||
| } | |||
| /** | |||
| * Tests the Slope class | |||
| * | |||
| * @param args Command line - not used | |||
| */ | |||
| public static void main(String[] args) { | |||
| Slope slope = new Slope(); | |||
| // tests | |||
| // Input: 0, 0, 1, 1 -> slope: 1 | |||
| slope.setSlope(0, 0, 1, 1); | |||
| System.out.println("Slope: " + slope.getSlope()); | |||
| // Input: 0, 0, 1, -1 -> slope: -1 | |||
| slope.setSlope(0, 0, 1, -1); | |||
| System.out.println("Slope: " + slope.getSlope()); | |||
| // Input: 0, 0, 1, 0 -> slope: 0 | |||
| slope.setSlope(0, 0, 1, 0); | |||
| System.out.println("Slope: " + slope.getSlope()); | |||
| // Input: 0, 0, 0, 1 -> slope: UND | |||
| slope.setSlope(0, 0, 0, 1); | |||
| System.out.println("Slope: " + slope.getSlope()); | |||
| // Input: 0, 0, 1, 2 -> slope: | |||
| slope.setSlope(0, 0, 3, 2); | |||
| System.out.println("Slope: " + slope.getSlope()); | |||
| // More? | |||
| } | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <classpath> | |||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> | |||
| <attributes> | |||
| <attribute name="module" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="src" path="src"/> | |||
| <classpathentry kind="output" path="bin"/> | |||
| </classpath> | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <projectDescription> | |||
| <name>PROJECT-1</name> | |||
| <comment></comment> | |||
| <projects> | |||
| </projects> | |||
| <buildSpec> | |||
| <buildCommand> | |||
| <name>org.eclipse.jdt.core.javabuilder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| </buildSpec> | |||
| <natures> | |||
| <nature>org.eclipse.jdt.core.javanature</nature> | |||
| </natures> | |||
| </projectDescription> | |||
| @ -0,0 +1,9 @@ | |||
| /** | |||
| * | |||
| */ | |||
| /** | |||
| * @author brett | |||
| * | |||
| */ | |||
| module uwstout.courses.cs144 { | |||
| } | |||
| @ -0,0 +1,151 @@ | |||
| package uwstout.courses.cs144.projects.project1.freefall; | |||
| import java.util.Scanner; | |||
| /* ALGORITHM: | |||
| * | |||
| * # Get input from the user | |||
| * - Print "Enter object name: " | |||
| * - Read name | |||
| * - Print "Enter object mass: " | |||
| * - Read mass # in kg | |||
| * - Print "Enter initial velocity: " | |||
| * - Read V_0 # in m/s | |||
| * - Print "Enter time: " | |||
| * - Read t # in s | |||
| * | |||
| * # Constants | |||
| * G <- 9.8 # Gravity in m/s^2 | |||
| * | |||
| * # Start the calculations | |||
| * V_f <- G * t + V_0 # in m/s | |||
| * distance <- [(V_0 + V_f) / 2] * t # in m | |||
| * momentum <- [mass * V_f] # in kg m/s | |||
| * force <- G * mass # in N | |||
| * kinetic <- [(mass * V_f ^ 2) / 2] # in J | |||
| * | |||
| * Print name | |||
| * Print "Mass: " + mass + "kg" | |||
| * Print "Initial Velocity: " + V_0 + "m/s" | |||
| * Print "Time in Free Fall: " + t + "s" | |||
| * Print "Final Velocity: " + V_f + "m/s" | |||
| * Print "Distance Traveled: " + distance + "m" | |||
| * Print "Momentum: " + momentum + "kg m/s" | |||
| * Print "Force: " + force + "N" | |||
| * Print "Kinetic Energy " + kinetic + "J" | |||
| */ | |||
| /* TESTS: | |||
| * | |||
| * Input1: | |||
| * Name: Baseball | |||
| * Mass: 0.145 | |||
| * V_0: 40.2 | |||
| * Time: 10 | |||
| * | |||
| * Output1: | |||
| * Baseball | |||
| * Mass: 0.15kg | |||
| * Initial Velocity: 40.20m/s | |||
| * Time in Free Fall: 10.00s | |||
| * Final Velocity: 138.20m/s | |||
| * Distance Traveled: 892.00m | |||
| * Momentum: 20.04kg m/s | |||
| * Force: 1.42N | |||
| * Kinetic Energy: 1384.69J | |||
| * | |||
| * Test2: | |||
| * Name: Gus | |||
| * Mass: 68.1 | |||
| * V_0: 0 | |||
| * Time: 30 | |||
| * | |||
| * Output2: | |||
| * Gus | |||
| * Mass: 68.10kg | |||
| * Initial Velocity: 0.00m/s | |||
| * Time in Free Fall: 30.00s | |||
| * Final Velocity: 294.00m/s | |||
| * Distance Traveled: 4410.00m | |||
| * Momentum: 20021.40kg m/s | |||
| * Force: 667.38N | |||
| * Kinetic Energy: 2943145.80J | |||
| * | |||
| */ | |||
| /** | |||
| * Calculates several values relating to a free-falling object in a vacuum. | |||
| * Specifically, it will calculate the final velocity, distance traveled, the | |||
| * momentum, the force acting on the object, and the kinetic energy of the | |||
| * object after a given time passes. | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.19 | |||
| */ | |||
| public class FreeFall { | |||
| private static final double G = 9.8; // m/s^2 | |||
| /** | |||
| * Calculates several values relating to a free-falling object in a vacuum. | |||
| * Specifically, it will calculate the final velocity, distance traveled, | |||
| * the momentum, the force acting on the object, and the kinetic energy of | |||
| * the object after a given time passes. | |||
| * | |||
| * @param args Command line arguments (not used) | |||
| */ | |||
| public static void main(String[] args) { | |||
| Scanner sc = new Scanner(System.in); | |||
| System.out.print("Enter the name of the object: "); | |||
| String objName = sc.nextLine(); | |||
| System.out.print("Enter the mass (in kg) of " + objName + ": "); | |||
| Value objMass = new Value(sc.nextDouble(), "Mass", "kg"); | |||
| System.out.print("Enter the initial velocity (in m/s): "); | |||
| Value initialVelocity = new Value(sc.nextDouble(), "Initial_Velocity", | |||
| "m/s"); | |||
| System.out.print("Enter the time (in seconds): "); | |||
| Value timeValue = new Value(sc.nextDouble(), "Time_in_Free_Fall", "s"); | |||
| sc.close(); | |||
| // final velocity (V_f = Gt + V_0) m/s | |||
| Value finalVelocity = new Value( | |||
| G * timeValue.getValue() + initialVelocity.getValue(), | |||
| "Final_Velocity", "m/s"); | |||
| // distance traveled (d = {[V_0 + V_f]/2}t ) m | |||
| Value distanceTraveled = new Value( | |||
| ((initialVelocity.getValue() + finalVelocity.getValue()) / 2.0) | |||
| * timeValue.getValue(), | |||
| "Distance_Traveled", "m"); | |||
| // momentum (p = mV_f) kg m/s | |||
| Value momentum = new Value( | |||
| objMass.getValue() * finalVelocity.getValue(), "Momentum", | |||
| "kg m/s"); | |||
| // force (F = Gm) N | |||
| Value force = new Value(G * objMass.getValue(), "Force", "N"); | |||
| // kinetic energy (E_k = {[mV_f^2]/2}) J | |||
| Value kineticEnergy = new Value( | |||
| (objMass.getValue() * Math.pow(finalVelocity.getValue(), 2)) | |||
| / 2, | |||
| "Kinetic_Energy", "J"); | |||
| System.out.println(objName); | |||
| System.out.println(objMass); | |||
| System.out.println(initialVelocity); | |||
| System.out.println(timeValue); | |||
| System.out.println(finalVelocity); | |||
| System.out.println(distanceTraveled); | |||
| System.out.println(momentum); | |||
| System.out.println(force); | |||
| System.out.println(kineticEnergy); | |||
| } | |||
| } | |||
| @ -0,0 +1,120 @@ | |||
| package uwstout.courses.cs144.projects.project1.freefall; | |||
| import java.text.DecimalFormat; | |||
| /** | |||
| * A value that can be easily formatted with {@link #toString()}. | |||
| * | |||
| * @author Brett Bender | |||
| * @version 2022.10.19 | |||
| */ | |||
| public class Value { | |||
| // Since all decimals will always be the same format, can just share the | |||
| // instance between Value instances. | |||
| private static final DecimalFormat DF = new DecimalFormat("0.00"); | |||
| private static final int DEFAULT_LABEL_WIDTH = 20; | |||
| private static final int DEFAULT_VALUE_WIDTH = 16; | |||
| private static final int MIN_LABEL_WIDTH = 12; | |||
| private static final int MIN_VALUE_WIDTH = 8; | |||
| private double value; | |||
| private String label; | |||
| private String units; | |||
| private int labelWidth; | |||
| private int valueWidth; | |||
| /** | |||
| * Constructs a new value that can be formatted with {@link #toString()}. | |||
| * | |||
| * @param nValue The value of this Value | |||
| * @param nLabel The label of this Value | |||
| * @param nUnits The units of this Value | |||
| */ | |||
| public Value(double nValue, String nLabel, String nUnits) { | |||
| value = nValue; | |||
| label = nLabel.replace('_', ' '); | |||
| units = nUnits; | |||
| labelWidth = DEFAULT_LABEL_WIDTH; | |||
| valueWidth = DEFAULT_VALUE_WIDTH; | |||
| } | |||
| /** | |||
| * Get the value stored by this Value | |||
| * | |||
| * @return The value | |||
| */ | |||
| public double getValue() { | |||
| return value; | |||
| } | |||
| /** | |||
| * Get the label of this Value | |||
| * | |||
| * @return The label | |||
| */ | |||
| public String getLabel() { | |||
| return label; | |||
| } | |||
| /** | |||
| * Get the units of this value | |||
| * | |||
| * @return The units | |||
| */ | |||
| public String getUnits() { | |||
| return units; | |||
| } | |||
| /** | |||
| * Get the width of this Value's label | |||
| * | |||
| * @return The label width | |||
| */ | |||
| public int getLabelWidth() { | |||
| return labelWidth; | |||
| } | |||
| /** | |||
| * Get the width of this Value's value | |||
| * | |||
| * @return The value width | |||
| */ | |||
| public int getValueWidth() { | |||
| return valueWidth; | |||
| } | |||
| /** | |||
| * Set the width of this Value's label. Will be automatically enforced to be | |||
| * above the {@link #MIN_LABEL_WIDTH}. | |||
| * | |||
| * @param nLabelWidth The new label width | |||
| */ | |||
| public void setLabelWidth(int nLabelWidth) { | |||
| labelWidth = Math.max(MIN_LABEL_WIDTH, nLabelWidth); | |||
| } | |||
| /** | |||
| * Set the width of this Value's value. Will be automatically enforced to be | |||
| * above the {@link #MIN_VALUE_WIDTH} | |||
| * | |||
| * @param nValueWidth The new value width | |||
| */ | |||
| public void setValueWidth(int nValueWidth) { | |||
| valueWidth = Math.max(MIN_VALUE_WIDTH, nValueWidth); | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| String retString = label + " ".repeat(labelWidth - label.length()); | |||
| String valString = DF.format(value); | |||
| retString += " ".repeat(valueWidth - valString.length()) + valString; | |||
| retString += units; | |||
| return retString; | |||
| } | |||
| } | |||