Fall 2020 [Bono]

CS 455 Midterm 1 Solution

Q1 (Student statement agreement)


Q2 [Early exam]

Q2.1.

Wahoo!
(7, 10) (7, 10) (2, 5)
(7, 10) (7, 10) (7, 10)
Q2.2.    4


Q2 [Later exam]

Q2.1.

Penny!
(8, 5) (8, 5) (5, 2)
(11, 8) (11, 8) (5, 2)
Q2.2.    4


Q3.1 Many correct solutions. Here's the most common one.

Description: A single-word sentence.

Test case 2:

   Hello.

Expected result:

   Hello

Q3.2 Output for Test case 1:

  This
  is
  a
Output for Test case 2: (depends on answer given for Q3.1)
  <empty>
Q3.3 Changes shown in bold
  Scanner in = new Scanner(System.in);
  String word = in.next();
  while (word.charAt(word.length()-1) != '.') {
     System.out.println(word);
     word = in.next();
  }
  System.out.println(word.substring(0, word.length() - 1));


Q4. [Early exam] only one correct answer

cp ../lab1/Hello.java .
Q4. [Later exam] only one correct answer
cp ~/lab1/Hello.java .


Q5 Solution in bold.
This is one of two common solutions, the other one involves an array smaller by two, and shifting the index (e.g., position 0 stores how many times we rolled 2, i.e., a 1 and 1).

public class DiceSimulator {

   private Die die;       // one or two Die objects ok here
   private int numRolls
   private int[] results; 

   // constructs a dice simulator using dice with the given number of sides 
   // pre: numSides >= 1
   public DiceSimulator(int numSides) {
      
      die = new Die(numSides);
      numRolls = 0;
      results = new int[2*numSides + 1];
      
   }

   // run the simulation for the given number of rolls of the pair of dice 
   // pre: numRolls >= 0
   public void run(int numRolls) {
      
      this.numRolls += numRolls;
      for (int i = 0; i < numRolls; i++) {
         int sum = die.roll() + die.roll();
         results[sum]++;
      }
      
   }

   // prints out the results of the simulation:
   // shows for each of the values from 2 to 2*numSides, 
   // how many times the roll of the pair summed up to that value
   // [see sample output for details of output format] 
   public void printResults() {
      // to save you some typing... here's *part* of the code for printing
      // the headers for the table of results
      System.out.print("Results of rolling the dice ");
      
      System.out.println(numRolls + " times:");
      
      System.out.println("sum   number of rolls");
      
      for (int sum = 2; sum < results.length; sum++) {
         System.out.println(sum + "   " + results[sum]);
      }
      
   }
}


Q6.1 instance variables
Q6.2 parameters (methods also accepted)


Q7
When running this program, when a user resizes the window the bar graph and labels will keep changing as the user drags the mouse.


Q8 [Early exam]

// PRE: values.length > 1 and each values[i] is >= 0
public static double avgExcludeHighest(int[] values) {

   int max = 0;   //   or values[0]    
   int sum = 0;
      
   for (int i = 0; i < values.length; i++) {
      if (values[i] > max) {
         max = values[i];
      }
      sum += values[i];
   }
   sum -= max;
   int count = values.length - 1;

   return sum / (double) count;

}

Q8 [Later exam]
// PRE: scores.length > 1 and each scores[i] is >= 0
public static double avgExcludeLowest(int[] scores) {

   int min = scores[0];  // or Integer.MAX_VALUE   
   int sum = 0;
      
   for (int i = 0; i < scores.length; i++) {
      if (scores[i] < min) {
         min = scores[i];
      }
      sum += scores[i];
   }
   sum -= min;
   int count = scores.length - 1;

   return sum / (double) count;

}