University of Washington, CSE 142

Lab 2: For loops, Parameters, Graphics

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

lab document created by Marty Stepp, Stuart Reges, Whitaker Brand and Hélène Martin

Basic lab instructions

Today's lab

Goals for today:

Exercise : jGRASP Debugger

continued on the next slide...

Exercise - jGRASP Debugger

continued on the next slide...

Exercise - jGRASP Debugger

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 : neighbor's design

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.

Class constants

A class constant is a global value that cannot be changed.

public static final type name = expression;

Example:

public static final int DAYS_PER_WEEK = 7;
public static final double TAX_RATE = 0.10;

for loop expressions w/ constant

When adding a class constant to a loop expression, it affects the constant that must be added in the expression. Suppose we have the two loop expressions below for figure sizes of 5 and 9. The third line of the table shows the general formula that would be used if we turned our figure's size into a constant named SIZE.

size expression relationship
5 8 * line + 16 16 = 3 * 5 + 1
9 8 * line + 28 28 = 3 * 9 + 1
SIZE 8 * line + (3 * SIZE + 1)

continued on the next slide ...

Exercise : for loop table w/ constant

You already found loop expressions for the slash figure at size 6. Now make a table at size 4 and use the two to generalize the loop expression in terms of a constant for the figure size.

!!!!!!!!!!!!!!
\\!!!!!!!!!!//
\\\\!!!!!!////
\\\\\\!!//////
Line \ ! /
1
0
14
0
2
2
10
2
3
4
6
4
4
6
2
6
\ and /
size 6  2 * line +
-2
size 4  2 * line +
-2
size SIZE  2 * line +
-2
!
size 6 -4 * line +
26
size 4 -4 * line +
18
size SIZE -4 * line + (
4
 * SIZE +
2
)

Exercise : SlashFigure2

Test your code in the Output Comparison Tool.

Parameters

A parameter allows you to pass in a value to a method as you call it.

public static void name(type name) {   // declare
methodName(expression);                // call

Example:

public static void squared(int num) {
    System.out.println(num + " times " + num + " is " + (num * num));
}
...
squared(3);          // 3 times 3 is 9
squared(8);          // 8 times 8 is 64

Exercise : Parameters output

Solving "Parameter Mystery" problems

Exercise : Parameter Mystery practice-it

Exercise : Syntax errors

Exercise - answer

  1. line 5: cannot use variable y without declaring and initializing it
  2. line 5: cannot declare the type of y in the method call
  3. line 6: cannot call printer without the correct number of parameters (2, in this case)
  4. line 7: cannot call printer by passing the correct type of parameters (double, in this case)
  5. line 8: cannot refer to the variable z: it is in scope inside printer, not main
  6. line 11: must provide a type for x
  7. line 11: must provide a variable name for the second parameter
  8. line 12: must refer to the parameters using the exact same spelling
  9. line 13: cannot refer to variables in main that were not passed into printer as a parameter

Exercise - Corrected version

Exercise : printSquare practice-it

Exercise : Parameter Mystery practice-it

Graphics

Now we'll explore several exercises related to drawing graphics.

quilt drawingpanel compare

Exercise : Syntax errors

answer on next slide...

Exercise - answer

  1. line 1: incorrect import statement; should import java.awt.*
  2. line 5: missing word new before 2nd occurrence of DrawingPanel
  3. line 6: method name should be setBackground
  4. line 6: missing panel. before setBackground
  5. line 8: method name should be getGraphics
  6. line 9: the setColor method is part of object g, not panel
  7. line 9: should not write new before Color.BLUE
  8. line 10: method name should be drawRect
  9. line 10: missing two parameters from drawRect (width and height)
  10. line 11: color should be specified as Color.RED, not "RED"
  11. line 12: method name should be fillOval
  12. line 12: wrong parameter types; width/height must be integers

Exercise - corrected version

Exercise : Face practice-it

Write a complete Java program that draws the following output:

face

Exercise - answer

import java.awt.*;

public class Face1 {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(220, 150);
        Graphics g = panel.getGraphics();
        
        g.drawOval(10, 30, 100, 100);   // face outline
        g.setColor(Color.BLUE);
        g.fillOval(30, 60, 20, 20);     // eyes
        g.fillOval(70, 60, 20, 20);
        g.setColor(Color.RED);          // mouth
        g.drawLine(40, 100, 80, 100);
    }
}

Exercise : Face 1+2

face

Suppose you have an existing program that draws the "face" figure at right. Let's modify the program using methods and parameters so that we can draw several faces at different locations.

continued on the next slide...

Exercise : Face 2 practice-it

Modify the Face program to draw the following output. Write a parameterized method that draws a face at different positions.

face 2

Exercise - answer

import java.awt.*;

public class Face2 {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(320, 180);
        Graphics g = panel.getGraphics();
        drawFace(g, 10, 30);
        drawFace(g, 150, 50);
    }
    
    public static void drawFace(Graphics g, int x, int y) {
        g.setColor(Color.BLACK);
        g.drawOval(x, y, 100, 100);
        g.setColor(Color.BLUE);
        g.fillOval(x + 20, y + 30, 20, 20);
        g.fillOval(x + 60, y + 30, 20, 20);
        g.setColor(Color.RED);
        g.drawLine(x + 30, y + 70, x + 70, y + 70);
    }
}

Exercise : Face 3 practice-it

Modify your previous Java program to draw the following output. Use a for loop with your parameterized method to draw faces at different positions.

face 2

Exercise - answer

import java.awt.*;

public class Face3 {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(520, 180);
        Graphics g = panel.getGraphics();
        for (int i = 0; i < 5; i++) {
            drawFace(g, 10 + i * 100, 30);
        }
    }
    
    public static void drawFace(Graphics g, int x, int y) {
        g.setColor(Color.BLACK);
        g.drawOval(x, y, 100, 100);
        g.setColor(Color.BLUE);
        g.fillOval(x + 20, y + 30, 20, 20);
        g.fillOval(x + 60, y + 30, 20, 20);
        g.setColor(Color.RED);
        g.drawLine(x + 30, y + 70, x + 70, y + 70);
    }
}

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!