Difference between revisions of "CISC181 S2019 Lab1"

From class_wiki
Jump to: navigation, search
(Created page with "__NOTOC__ * Make a new project (but now ''n'' = 1) following these instructions * Name your class "Lab1". This happens when you a...")
 
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
* Make a new project (but now ''n'' = 1) following [[CISC181_S2019_NewAndroidStudioProject | these ]] instructions
 
* Make a new project (but now ''n'' = 1) following [[CISC181_S2019_NewAndroidStudioProject | these ]] instructions
 
* Name your class "Lab1".  This happens when you are creating a new module, in the ''Java class name'' field
 
* Name your class "Lab1".  This happens when you are creating a new module, in the ''Java class name'' field
** Add your name and your partner's name in a comment before the class declaration
+
** Add [[CISC181_S2019_Lab1_pairs | your name and your partner's name]] in a comment before the class declaration.  Remember that there are new pairs this week!
 
** As explained in the subsections below, modify <tt>static void main()</tt>  and create the '''three''' other methods described below.
 
** As explained in the subsections below, modify <tt>static void main()</tt>  and create the '''three''' other methods described below.
  
Line 14: Line 14:
 
* Option 1: Ask the user to enter ''theta'' and ''v'', read them, pass them to <tt>computeDistanceToLanding()</tt>, and print the returned results, each on its own line and with 2 digits of precision after the decimal.
 
* Option 1: Ask the user to enter ''theta'' and ''v'', read them, pass them to <tt>computeDistanceToLanding()</tt>, and print the returned results, each on its own line and with 2 digits of precision after the decimal.
 
* Option 2: Ask the user to enter two chars and a positive number.  Read these and pass them to <tt>drawLayeredPyramid()</tt>.
 
* Option 2: Ask the user to enter two chars and a positive number.  Read these and pass them to <tt>drawLayeredPyramid()</tt>.
* Option 3: Ask the user to input a string on its own line.  Read this and pass it to <tt>mostCommonChar()</tt>.  Print the returned value.
+
* Option 3: Ask the user to input a string on its own line.  Read this and pass it to <tt>minMaxFrequencyChar()</tt>.  Print the returned characters on one line, separated by a space.
 
* For all user inputs, check for legality here in <tt>main()</tt>.  If there is a problem, print an informative message with the word "error" somewhere in it, and let the program end.
 
* For all user inputs, check for legality here in <tt>main()</tt>.  If there is a problem, print an informative message with the word "error" somewhere in it, and let the program end.
  
Line 21: Line 21:
 
  [[Image:cannon.jpg|400px]]
 
  [[Image:cannon.jpg|400px]]
  
Suppose you want to calculate how far away a cannonball will land on (1) Earth, (2) Earth's moon, (3) Jupiter, and (4) the sun if fired at an inclination angle of ''theta'' degrees and an initial velocity of ''v'' meters / second.  Assume that the ground is perfectly planar, the cannon is at a height of 0 m, and neglect drag from atmospheric resistance. I am not going to provide the relevant physics formula -- finding it and turning it into Java is your assignment here.  Once you have calculated the 4 distances, return the answers in meters in an array.
+
Suppose you want to calculate how far away a cannonball will land if fired at an inclination angle of ''theta'' degrees and an initial velocity of ''v'' meters / second.  Furthermore, you want to answer this question for four solar bodies: (1) Earth, (2) Earth's moon, (3) Jupiter, and (4) the sun.  Assume that the ground is perfectly planar, the cannon is at a height of 0 m, and neglect drag from atmospheric resistance. I am not going to provide the relevant physics formula -- finding it and turning it into Java is your assignment here.  Once you have calculated the 4 distances, return the answers in meters in an array.
  
 
===<tt>static void drawLayeredPyramid(int numLayers, char firstChar, char secondChar)</tt>===
 
===<tt>static void drawLayeredPyramid(int numLayers, char firstChar, char secondChar)</tt>===
Line 40: Line 40:
 
It consists of 10 alternating rows of $ and ¢ characters.  The first row has 10 columns of characters, and each successive row has one less.
 
It consists of 10 alternating rows of $ and ¢ characters.  The first row has 10 columns of characters, and each successive row has one less.
 
<tt>drawLayeredPyramid()</tt> should make a similar pattern with <tt>numLayers</tt> rows, alternating characters <tt>firstChar</tt> and <tt>secondChar</tt>.
 
<tt>drawLayeredPyramid()</tt> should make a similar pattern with <tt>numLayers</tt> rows, alternating characters <tt>firstChar</tt> and <tt>secondChar</tt>.
This will require at least one ''loop''; see the [https://docs.google.com/presentation/d/1cXLfYiU7YJaXANzIi9ZBHAW2-CA5Ai6JxJbotKgYVuA/edit?usp=sharing slides for the Sep. 13 lecture] for material about doing loops in Java.
 
  
===<tt>static char mostCommonChar(String queryString)</tt>===
 
  
Iterate (aka loop) through the characters in <tt>queryString</tt> and count how many times each character occurs.  Whichever character occurs the most times, return it.  Ties should be broken in alphabetical order--that is, if 'a' occurs 7 times and 'b' occurs 7 times, return 'a'.  To make a comparison, use [https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#compare(char,%20char) Character.compare()].
+
===<tt>static char[] minMaxFrequencyChar(String queryString)</tt>===
  
This is somewhat tricky, but you can (and must, for this assignment) do this ''without'' any external data structures such as arrays.  The only <tt>String</tt> functions that you can use here are [https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int) charAt()] and [https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#length() length()].
+
Iterate (aka loop) through the characters in <tt>queryString</tt> and count how many times each character occurs.  Whichever characters occurs the ''least'' times and the ''most'' times, return them in an array (min in slot 0, max in slot 1).  Ties should be broken in alphabetical order--that is, if 7 is the max frequency of any character but both 'a' and 'b' occur 7 times, return 'a'.  To make a comparison, use [https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#compare(char,%20char) Character.compare()].
 +
 
 +
You may not use any external data structures such as arrays, maps, lists, or sets for your solution.  The only <tt>String</tt> functions that you can use here are [https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int) charAt()] and [https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#length() length()].

Latest revision as of 12:08, 20 February 2019

  • Make a new project (but now n = 1) following these instructions
  • Name your class "Lab1". This happens when you are creating a new module, in the Java class name field
    • Add your name and your partner's name in a comment before the class declaration. Remember that there are new pairs this week!
    • As explained in the subsections below, modify static void main() and create the three other methods described below.
  • Submit your Lab1.java on Canvas by midnight of Tuesday, February 26. As before, each partner should submit identical .java files and add a comment about how your partner interaction was this week.

static void main(String[] args)

Your main() should do the following:

  • As with Lab #0 last week, give your user the choice of several options (using println() or printf()), to be chosen by inputting a single number (which is read with a Scanner object). This time, the options are: 1 to solve a basic physics problem, 2 to draw a particular pattern with print commands, and 3 to find the most common character in a string. Whichever choice is given (after error-checking), take the steps specified below and call the corresponding function.
  • Option 1: Ask the user to enter theta and v, read them, pass them to computeDistanceToLanding(), and print the returned results, each on its own line and with 2 digits of precision after the decimal.
  • Option 2: Ask the user to enter two chars and a positive number. Read these and pass them to drawLayeredPyramid().
  • Option 3: Ask the user to input a string on its own line. Read this and pass it to minMaxFrequencyChar(). Print the returned characters on one line, separated by a space.
  • For all user inputs, check for legality here in main(). If there is a problem, print an informative message with the word "error" somewhere in it, and let the program end.

static float[] computeDistanceToLanding(float thetaDegrees, float initialVelocityMetersPerSecond)

Cannon.jpg

Suppose you want to calculate how far away a cannonball will land if fired at an inclination angle of theta degrees and an initial velocity of v meters / second. Furthermore, you want to answer this question for four solar bodies: (1) Earth, (2) Earth's moon, (3) Jupiter, and (4) the sun. Assume that the ground is perfectly planar, the cannon is at a height of 0 m, and neglect drag from atmospheric resistance. I am not going to provide the relevant physics formula -- finding it and turning it into Java is your assignment here. Once you have calculated the 4 distances, return the answers in meters in an array.

static void drawLayeredPyramid(int numLayers, char firstChar, char secondChar)

Consider the following pattern:

$$$$$$$$$$
 ¢¢¢¢¢¢¢¢¢
  $$$$$$$$
   ¢¢¢¢¢¢¢
    $$$$$$
     ¢¢¢¢¢
      $$$$
       ¢¢¢
        $$
         ¢

It consists of 10 alternating rows of $ and ¢ characters. The first row has 10 columns of characters, and each successive row has one less. drawLayeredPyramid() should make a similar pattern with numLayers rows, alternating characters firstChar and secondChar.


static char[] minMaxFrequencyChar(String queryString)

Iterate (aka loop) through the characters in queryString and count how many times each character occurs. Whichever characters occurs the least times and the most times, return them in an array (min in slot 0, max in slot 1). Ties should be broken in alphabetical order--that is, if 7 is the max frequency of any character but both 'a' and 'b' occur 7 times, return 'a'. To make a comparison, use Character.compare().

You may not use any external data structures such as arrays, maps, lists, or sets for your solution. The only String functions that you can use here are charAt() and length().