IC211 Spring AY 2020

HW Procedural Programming

Name (Last, First): ____________________________________________________ Alpha: _____________________
Describe help received: _________________________________________________________________

  1. [10pts] Consider the following program:
    HWEX1.java Rat.java

    Identify each of the following as either primitive, an array-reference or a class-reference:

    args      __________________
    
    subj1     __________________
    
    sc        __________________
    
    nm        __________________
    
    wt        __________________
    
    wtInGrams __________________
    
    r         __________________
    
    r.name    __________________
    
    r.weight  __________________
    
    import java.util.*;
    
    public class HWEX1 {
      public static Rat read() {
        Scanner sc = new Scanner(System.in);
        String nm = sc.next();
        double wt = sc.nextDouble();
        double wtInGrams = wt*28.3495;
        Rat r = new Rat();
        r.name = nm;
        r.weight = wtInGrams;
        return r;
      }
    
      public static void main(String[] args) {
        Rat subj1 = read();
      }
    }
    class Rat {
      String name;
      double weight;
    }
  2. [5pts] Continuing from the previous example, how many instances of class Rat are created when this program is run? How many instances of class String are created when the function read() is called, assuming the user inputs name & weight properly. Explain your answers! [Note: "instance" is a technical term. Read the notes!]
  3. [5pts] Consider the following file HWEX2.java:
    public class HWEX2 {
      public static int fact(int n) {
        return n < 2 ? 1 : n*fact(n-1);
      }
      public static void main(String[] args) {
        for(int i = 1; i < 10; i++)
          System.out.println(i + ": " + fact(i));
      }
    }
    How would you call the function fact to compute 15 factorial from the main function of another .java file (assume it is HW.java)? If you run the program from HW.java (i.e. give the command java HW), how does the JVM know where to find the code for the fact function?
  4. [80Pts] Create a file entitled Mid.java and put this class definition in it:

    
    public class Mid {
      public String alpha;
      public String firstName;
      public String lastName;
      public int company;
    }
    

    Then write a program entitled HW3.java with the following attributes:

    • A createMid() method that takes a single Scanner object as a parameter. It must ask the user and use the Scanner for the information necessary to construct a Mid. It then returns that Mid.
    • A printMid() method that takes a Mid as an argument and prints the information about that Mid to the screen.
    • When you print the alpha code, any leading zeros should print properly. For example: '012226'
    • A main() method that asks how many Mids you would like to enter, then creates an array of that many Mids. It uses your createMid() function to fill that array up with constructed Mids. It then asks the user for a company number, and uses your printMid() function to print the information about all mids in that company to the screen.
    • You should have two files, 'Mid.java' and 'HW3.java'
    • Compiling!: with two files, just run javac Mid.java HW3.java or the broader javac *.java

    An example run:

    ~/$ java HW3
    How many mids? 3
    Alpha? 160006
    First name? George
    Last name? Finklehoffer
    Company? 3
    Alpha? 160012
    First name? John
    Last name? Jingleheimer-Smith
    Company? 4
    Alpha? 160018
    First name? Sterling
    Last name? Hotchkiss
    Company? 3
    What company would you like to print out? 3
    160006 Finklehoffer George 3
    160018 Hotchkiss Sterling 3

    Your input and output should be exactly as it is above.

Turn In This sheet (filled in with answers!), a printout (using codeprint) of your code, and a screenshot of it running on the above input. Note: you can print both source code files at once with codeprint like this: codeprint HW3.java Mid.java