Except where otherwise noted, the contents of this document are Copyright 2010 Stuart Reges and Marty Stepp.
lab document created by Whitaker Brand and Marty Stepp
Goals for today:
DrawingPanel class
					Graphics and Color classes
					
public class MysteryNums {
    public static void main(String[] args) {
        int x = 15;
        sentence(x, 42);      // 15 42
        int y = x - 7;
        sentence(y, x + y);   // 8 23
    }
    
    public static void sentence(int num1, int num2) {
        System.out.println(num1 + " " + num2);
    }
}
					
public class MysterySoda {
    public static void main(String[] args) {
        String soda = "coke";
        String pop = "pepsi";
        String coke = "pop";
        String pepsi = "soda";
        String say = pop;
        carbonated(coke, soda, pop);         // say coke not pepsi or pop
        carbonated(pop, pepsi, pepsi);       // say soda not soda or pepsi
        carbonated("pop", pop, "koolaid");   // say pepsi not koolaid or pop
        carbonated(say, "say", pop);         // say say not pepsi or pepsi
    }
    public static void carbonated(String coke, String soda, String pop) {
        System.out.println("say " + soda + " not " + pop + " or " + coke);
    }
}
					
									1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | 
								
						
public class Parameters {
    public static void main() {
        double bubble = 867.5309;
        double x = 10.01;
        printer(double x, double y);
        printer(x);
        printer("barack", "obama");
        System.out.println("z = " + z);
    }
    public static void printer(x, y double) {
        int z = 5;
        System.out.println("x = " + double x + " and y = " + y);
        System.out.println("The value from main is: " + bubble);
    }
}
								 | 
							
y without declaring and initializing ity in the method callprinter without the correct number of parameters (2, in this case)printer by passing the correct type of parameters (double, in this case)z: it is in scope inside printer, not mainxmain that were not passed into printer as a parameter
public class Parameters {
    public static void main() {
        double bubble = 867.5309;
        double x = 10.01;
        double y = 5.3;
        printer(double x, double y);
        printer(x, 0.0);
        printer("barack", "obama");
        int z = 5;
        System.out.println("z = " + z);
    }
    public static void printer(double x, double y) {
        System.out.println("x = " + x + " and y = " + y);
        System.out.println("The value from main is: " + bubble);
        int z = 5;
    }
}
					
					Write the results of each of the following expressions.  Make sure to use the proper type (.0 for a double, " " for a String).
				
Math.ceil(9.17) | 
						10.0  | 
					|
Math.pow(2, 4) | 
						16.0  | 
					|
Math.sqrt(64) | 
						8.0  | 
					|
Math.floor(12.73) + Math.max(8, 5) | 
						20.0  | 
					|
Math.abs(Math.min(-1, -3)) | 
						3  | 
					|
Math.ceil(Math.random()) | 
						1.0  | 
					|
-Math.pow(2, 2) + Math.pow(-2, 3) + Math.pow(2, -2) | 
						-11.75  | 
					|
Math.round(4.25) + Math.round(5.38) + Math.round(6.49) | 
						15.0  | 
					
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum = sum + i;
}
System.out.println(sum);    // 5050
					printPowersOf2 that uses a cumulative algorithm to print out the powers of 2 up to 2x.  It should take a parameter that determines x; that is, the exponent of the highest power of 2 to be printed.  For example, the following call:
						printPowersOf2(10);should produce the following output, because 210 = 1024:
1 2 4 8 16 32 64 128 256 512 1024(For this problem it's okay if your numbers have a
.0 at the end of them.)
					main method.  Call your method several times in main to ensure that it works.  Also check your answer using Practice-It by clicking the check-mark icon above.
					n
					
					
						printPowersOfN that prints the powers of any given number n up to n^x.  For example, the following call:
						printPowersOfN(3, 5);should produce the following output, because 35 = 243:
1 3 9 27 81 243and the call:
printPowersOfN(2, 10);should produce the same output as
printPowersOf2(10); :
						1 2 4 8 16 32 64 128 256 512 1024
Strings
					
					
						
							Write a method called printStrings that accepts a String and a number of repetitions as parameters and prints that String the given number of times with a space after each time.  For example, the call:
						
printStrings("abc", 5);
						will print the following output:
abc abc abc abc abc
main method.  Try calling your method several times from main and see what happens when you pass different values.
					printSquare
					
					
						printSquare that accepts min and max integers and prints a square of lines of increasing numbers. The first line should start with the minimum; each line that follows should start with the next-higher number. The numbers on a line wrap back to the minimum after it hits the maximum.  For example, the call:
						
						printSquare(3, 6);should produce the following output:
3456 4563 5634 6345
					Now we'll explore several exercises related to drawing graphics.
					
						
						(lecture slides)
					
				
					
				DrawingPanel that works with Java classes Graphics (a "pen" for drawing shapes) and Color.
					DrawingPanel.java to your program directory.
					DrawingPanel window by clicking File, Compare to Web File....
					
									1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  | 
								
						
import Java.*;
public class PrettyPicture {
    public static void main(String[] args) {
        DrawingPanel panel = DrawingPanel(220, 150);
        setBackgroundColor(Color.YELLOW);
        
        Graphics g = panel.Graphics();
        panel.setColor(new Color.BLUE);
        g.drawRectangle(50, 25);
        g.setColor("RED");
        g.fillEllipse(130, 25, 42.1, 40.5);
    }
}
								 | 
							
answer on next slide...
import statement; should import java.awt.*
					new before 2nd occurrence of DrawingPanel
					setBackground
					panel. before setBackground
					getGraphics
					setColor method is part of object g, not panel
					new before Color.BLUE
					drawRect
					drawRect (width and height)
					Color.RED, not "RED"
					fillOval
					
import java.awt.*;
public class PrettyPicture {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(220, 150);
        panel.setBackground(Color.YELLOW);
        
        Graphics g = panel.getGraphics();
        g.setColor(Color.BLUE);
        g.drawRect(50, 25, 10, 10);
        g.setColor(Color.RED);
        g.fillOval(130, 25, 42, 40);
    }
}
					Write a complete Java program that draws the following output:
				
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);
    }
}
			
					Write a complete Java program to draw the following output using a for loop to draw the rectangular "stairs."  Copy/paste the code template on the next slide into jGRASP as a template to fill in.
				
				
import java.awt.*;
public class Stairs1 {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(110, 110);
        Graphics g = panel.getGraphics();
        for (int i = 0; i < 10; i++) {
            your code goes here ;
        }
    }
}
			
import java.awt.*;
public class Stairs1 {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(110, 110);
        Graphics g = panel.getGraphics();
        for (int i = 0; i < 10; i++) {
            g.drawRect(5, 5 + 10*i, 10 + 10*i, 10);
        }
    }
}
			
import java.awt.*;
public class Stairs1 {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(110, 110);
        Graphics g = panel.getGraphics();
        int x = 5;
        int y = 5;
        int width = 10;
        int height = 10;
        for (int i = 0; i < 10; i++) {
            g.drawRect(x, y, width, height);
            y = y + 10;           // move down and widen by 10
            width = width + 10;
        }
    }
}
			
					Modify your previous Java program to draw each of the following outputs.  Modify only the body inside your for loop.
				
					→
					
					
					
				
					To get each output, change the for loop body to the following:
				
// output 2
g.drawRect(5, 5 + 10*i, 100 - 10*i, 10);
				
// output 3
g.drawRect(95 - 10*i, 5 + 10*i, 10 + 10*i, 10);
				
// output 4
g.drawRect(5 + 10*i, 5 + 10*i, 100 - 10*i, 10);
			When you want to divide a graphical program into multiple drawing methods, you must pass Graphics g as a parameter in addition to any other parameters. Example:
public static void main(String[] args) {
    DrawingPanel panel = new DrawingPanel(400, 300);
    Graphics g = panel.getGraphics();
    ...
    drawStuff(g, 13, 52, 7);
}
public static void drawStuff(Graphics g, int a, int b, int c) {
    g.drawLine(a, 45, b, c);
    ...
}
				
			
					Modify your previous Face program to draw the following output.  Write a parameterized method that allows you to draw a face at different positions.
				
				
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);
    }
}
			
					Modify your previous Java program to draw the following output.  Use a for loop with your parameterized method to draw faces at different positions.
				
				
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);
    }
}
			
					Write a Java program that draws the following output using a for loop.
				
				
import java.awt.*;
public class Spiral {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(170, 170);
        Graphics g = panel.getGraphics();
        for (int i = 0; i < 8; i++) {
            g.drawLine(      10*i,   10 + 10*i, 160 - 10*i,  10 + 10*i);  // top
            g.drawLine(160 - 10*i,   10 + 10*i, 160 - 10*i, 160 - 10*i);  // right
            g.drawLine( 10 + 10*i,  160 - 10*i, 160 - 10*i, 160 - 10*i);  // bottom
            g.drawLine( 10 + 10*i,   20 + 10*i,  10 + 10*i, 160 - 10*i);  // left
        }
    }
}
			
import java.awt.*;
public class Spiral {
    public static void main(String[] args) {
        DrawingPanel panel = new DrawingPanel(170, 170);
        Graphics g = panel.getGraphics();
        int x = 0, y = 10;
        int len = 160;
        for (int i = 0; i < 8; i++) {
            g.drawLine(x, y, x + len, y);  // right
            x = x + len;
            len = len - 10;
            g.drawLine(x, y, x, y + len);  // down
            y = y + len;
            g.drawLine(x, y, x - len, y);  // left
            x = x - len;
            len = len - 10;
            g.drawLine(x, y, x, y - len);  // up
            y = y - len;
        }
    }
}
			printGrid
					
					
						printGrid that accepts two integers representing a number of rows and columns and prints a grid of integers from 1 to (rows*columns) in column-major order.
					printGrid(4, 6);should produce the following output:
1 5 9 13 17 21 2 6 10 14 18 22 3 7 11 15 19 23 4 8 12 16 20 24
Write a Java program that draws the following output.... Just kidding!
				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 Chapter 3 or Supplement 3G and try to solve them!  Note that you won't be able to do every problem from Chapter 3; some involve concepts we have not learned yet, such as return and Scanner.