University of Washington, CSE 142

Lab 2: Expressions, Variables, and Loops

Except where otherwise noted, the contents of this document are Copyright 2013 Stuart Reges and Marty Stepp.

lab document created by Marty Stepp, Stuart Reges and Whitaker Brand

Basic lab instructions

Today's lab

Goals for today:

Expressions

Recall that Java has expressions to represent math and other computations. Expressions may use operators, which are evaluated according to rules of precedence. Every expression produces a value of a given type.

Type Description Expression Example Result
int integers (up to 231 - 1) 3 + 4 * 5 23
double real numbers (up to 10308) 3.0 / 2.0 + 4.1 5.6
String text characters "hi" + (1 + 1) + "u" "hi2u"

Exercise : Expressions (2.1)

Write the results of each of the following expressions. If you're stuck, ask a TA or neighbor.

12 / 5
2
12.0 / 5
2.4
12 / 5 + 8 / 4
4
3 * 4 + 15 / 2
19
42 % 5 + 3 % 16***
5
***Hint: Suppose you have 3 apples, and you distribute them among 16 people so that everyone gets the same number of (whole) apples. How many (whole) apples does each person get? How many apples do you have left over?

Exercise : More expressions (2.1)

Write the results of each of the following expressions.

Some of these expressions include String concatenation. When the result of the expression evaluates to a String, put "quotation marks" around the result:

"x" + 2
"x2"
// Add the other quote to get the correct answer
2 + 6 + "cse 142"
"8cse 142"
"cse 142" + 2 + 6
"cse 14226"
1 + 9 / 2 * 2.0
9.0
46 / 3 / 2.0 / 3 * 4/5
2.0

jGRASP Interactions Pane

continued on the next slide...

Exercise : Using jGRASP Interactions Pane

In this exercise, you'll use the Interactions Pane to quickly discover the result of some expressions that would be difficult to evaluate by hand. Copy/paste each expression below into the Interactions Pane to evaluate it, then input the answer into this slide.

123 * 456 - 789
55299
3.14 + 1.59 * 2.65
7.3535
2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
1024
2 + 2 + "xyz" + 3 + 3
"4xyz33"

(For the last expression, the Interactions Pane doesn't put "" quotes around Strings when displaying results, so you must add those yourself if needed. For example, if the Interactions Pane gives you a result of abc123, it should be written here as "abc123".)

Variables

Recall that you can use a variable to store the results of an expression in memory and use them later in the program.

type name;                       // declare
name = value or expression;        // assign a value
...
type name = value or expression;   // declare-and-initialize together

Examples:

double iPhonePrice;
iPhonePrice = 299.95;

int siblings = 3;
System.out.println("I have " + siblings + " brothers/sisters.");

Exercise : Variable declaration syntax

Which of the following choices is the correct syntax for declaring a real number variable named grade and initializing its value to 4.0?

Exercise : Variable assignment syntax

Suppose you have a variable named grade, set to 1.6:

double grade = 1.6;   // uh-oh

Suppose later in the program's code, we want to change the value of grade to 4.0. Which is the correct syntax to do this?

Exercise : Variable mutation

Suppose you have a variable named balance, set to 463.23:

double balance = 463.23

Suppose later in the program's code, we want to add 5 to the account balance. Which is a correct statement to do this?

Exercise : a, b, and c practice-it

What are the values of a, b, and c after the following statements? Write your answers in the boxes on the right.

int a = 5;
int b = 10;
int c = b;

a = a + 1;            // a? 6
b = b - 1;            // b? 9
c = c + a;            // c? 16

for loops

A for loop repeats a group of statements a given number of times.

for (initialization; test; update) {
    statement(s) to repeat;
}

Example:

for (int i = 1; i <= 3; i++) {
    System.out.println("We're number one!");
}
System.out.println("/cheering");
Output:
We're number one!
We're number one!
We're number one!
/cheering

for loops

for (initialization; test; update) {
    statement(s) to repeat;
}
for (int i = 1; i <= 3; i++) {
    System.out.println("We're number one!");
}
System.out.println("/cheering");

The for loop keeps executing the println as long as the test condition is met:

  1. initialization :: int i = 1; :: start a counter at 1
  2. test :: i <= 3; :: continue as long as the counter i is less than 3
  3. execute the statements :: { System.out.println("We're number one!"); }
  4. update :: i++ :: add 1 to the counter
  5. go back to step 2 and check the test condition again: i is 1 bigger than it was last time through the loop

Once the test isn't true anymore, Java exits the for loop :: System.out.println("/cheering");

Exercise : simple for loop practice-it

Exercise : Verify solution in Practice-It!

screenshot Our Practice-It! system lets you solve Java problems online.

Exercise : What's the output?

What output is produced by the following Java program? Write the output in the box on the right side.

public class OddStuff {
    public static void main(String[] args) {
        int number = 32;
        for (int count = 1; count <= number; count++) {
            System.out.println(number);
            number = number / 2;
        }
    }
}

Output:

32
16
8
4

Exercise : What's the output?

What output is produced by the following Java method?
public static void stars() {
    for (int i = 1; i <= 10; i++) {
        for (int j = 1; j <= i; j++) {
            System.out.print("*");
        }
        for (int j = 1; j <= 20 - 2 * i; j++) {
            System.out.print(" ");
        }
        for (int j = 1; j <= i; j++) {
            System.out.print("*");
        }
        System.out.println();
    }
}
       
(Try to figure it out without running the code...
If you give up, copy and paste it into jGrasp and run it!)
  • Hint: Think of each inner loop from 1 to X as a loop that prints X copies of the given character.
  • Exercise - answer

    Exercise : ComputePay

    The following program redundantly repeats the same expressions many times. Download it and open it in jGRASP, then modify the program to remove the redundancy using variables. Use an appropriate type for each variable.

    The program's output should be the same after your modifications. No expression should be computed more than once in the code.

    Exercise : Syntax errors

    answer on next slide...

    Exercise - answer

    1. line 4: missing + between "x is" and x
    2. line 4: cannot print the value of x before assigning it a value
    3. line 6: cannot assign 15.2 into a variable of type int
    4. line 6: should not redeclare the variable's type
    5. line 7: " mark should be between now and +
    6. line 10: should not write the word int here
    7. line 10: variable y should be same type as x
    8. line 10: does not properly set y to be 1 more than x (should not write the word int here)
    9. line 11: and should be in quotes with surrounding spaces

    Exercise - corrected version

    Exercise : i, j, and k

    What are the values of i, j, and k after the following statements?

    int i = 2;
    int j = 3;
    int k = 4;
    int x = i + j + k;
    
    i = x - i - j;            // i? 4
    j = x - j - k;            // j? 2
    k = x - i - k;            // k? 1
    

    Exercise : Equation

    Suppose you have a real number variable x. Write a Java expression that computes a variable named y storing the following value:

    y = 12.3x4 - 9.1x3 + 19.3x2 - 4.6x + 34.2

    (We haven't learned a way to do exponents yet, but you can simulate them using several multiplications.)

    Use the example program on the next slide to test your code.

    Exercise - Example code

    Copy/paste this program into jGRASP to test your solution.

    // expected output:
    // y is 7043.7
    
    public class EquationY {
        public static void main(String[] args) {
            double x = 5;
    
            double y = put your expression for y here ;
    
            System.out.println("y is " + y);
        }
    }
    

    (answer on next slide)

    Exercise - answer

    double y = 12.3*x*x*x*x - 9.1*x*x*x + 19.3*x*x - 4.6*x + 34.2;
    

    If you want an added challenge, try to come up with a way to compute the above value while using the * operator no more than 4 times.

    (click Next → for answer)

    double y = (((12.3 * x - 9.1) * x + 19.3) * x - 4.6) * x + 34.2;
    

    Exercise : Birthday variables

    Exercise : for loop practice

    continued on the next slide...

    Exercise - fill in a table

    We want to produce the following output:

    *******
    *****
    ***
    *
    

    Fill in the table below indicating how many stars appear on each line of output.

    Line Stars
    1
    7
    2
    5
    3
    3
    4
    1

    Exercise - complete the expression

    We need an expression for the number of stars on each line of this form:

    multiplier * line + constant

    Exercise : Number lines, part 1 practice-it

    Exercise : Number lines, part 2 practice-it

    Exercise : Number lines, part 3 practice-it

    Exercise : printing a design practice-it

    Write a program to produce the following output using nested for loops. Use a table to help you figure out the patterns of characters on each line.

    -----1-----
    ----333----
    ---55555---
    --7777777--
    -999999999-
    
    Line Dashes Numbers
    1
    5
    1
    2
    4
    3
    3
    3
    5
    4
    2
    7
    5
    1
    9
    dashes expression
    -1
    * line +
    6
    numbers expression
    2
    * line +
    -1

    Test your loop expressions in Practice-It! using the checkmark icon above. Use your expressions in the loop tests of the inner loops of your code.

    Exercise : SlashFigure practice-it

    Write a Java program in a class named SlashFigure to produce the following output with nested for loops. Use a loop table if necessary to figure out the expressions.

    !!!!!!!!!!!!!!!!!!!!!!
    \\!!!!!!!!!!!!!!!!!!//
    \\\\!!!!!!!!!!!!!!////
    \\\\\\!!!!!!!!!!//////
    \\\\\\\\!!!!!!////////
    \\\\\\\\\\!!//////////
    
    Line \ ! /
    1
    0
    22
    0
    2
    2
    18
    2
    3
    4
    14
    4
    4
    6
    10
    6
    5
    8
    6
    8
    6
    10
    2
    10
    multiplier
    2
    -4
    2
    shift
    -2
    26
    -2

    Test your code in Practice-It! or the Output Comparison Tool.

    Exercise : SlashFigure2 practice-it

    Make a table of "\", "!", and "/" counts in the size 4 figure. Then, write a for loop to produce the size 4 figure. Finally, compare the loop tests for the size 4 and 7 figures, and write a for loop with a class constant that will produce a figure of any SIZE.

    size 4 size 7
    !!!!!!!!!!!!!!
    \\!!!!!!!!!!//
    \\\\!!!!!!////
    \\\\\\!!//////
    
    !!!!!!!!!!!!!!!!!!!!!!!!!!
    \\!!!!!!!!!!!!!!!!!!!!!!//
    \\\\!!!!!!!!!!!!!!!!!!////
    \\\\\\!!!!!!!!!!!!!!//////
    \\\\\\\\!!!!!!!!!!////////
    \\\\\\\\\\!!!!!!//////////
    \\\\\\\\\\\\!!////////////
    

    Test your code in the Output Comparison Tool or in PracticeIt!

    If you finish them all...

    If you finish all the exercises, try out our Practice-It web tool. It lets you solve Java problems from our Building Java Programs textbook.

    You can view an exercise, type a solution, and submit it to see if you have solved it correctly.

    Choose some problems from the book and try to solve them!