Download - Lec 9 05_sept [compatibility mode]
![Page 1: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/1.jpg)
Math and String Classes
Lecture 9
Naveen Kumar
![Page 2: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/2.jpg)
Constructing Objects
new Rectangle(5, 10, 20, 30)Detail: – The new operator makes a Rectangle object– It uses the parameters (5, 10, 20, and 30) to initialize
the data of the object– returns the object
Usually the output of the new operator is stored in a variable Rectangle box = new Rectangle(5, 10, 20, 30);
![Page 3: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/3.jpg)
Constructing Objects
Default constructor
new Rectangle() // constructs a rectangle with its top-left corner// at the origin (0, 0), width 0, and height 0
![Page 4: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/4.jpg)
Example
import java.awt.Rectangle; public class Move{public static void main(String[] args) {
Rectangle box = new Rectangle(5, 10, 20, 30); // Move the rectangle
box.translate(15, 25); // Print information about the moved rectangle
System.out.println("After moving, the top-left corner is:"); System.out.println(box.getX()); System.out.println(box.getY());
} }
![Page 5: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/5.jpg)
Random class
Random r = new Random(); int i = r.nextInt(int n) Returns random int ≥ 0 and < n int i = r.nextInt() Returns random int (full range) long i = r.nextLong() Returns random long (full range) float f = r.nextFloat() Returns random float ≥0.0 and <1.0 double d = r.nextDouble() Returns random double ≥ 0.0 and < 1.0 boolean b = r.nextBoolean() Returns random double (true ,false)
double x; x = Math.random(); // assigns random number to x
5
import java.util.Random;
![Page 6: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/6.jpg)
Object References
Describe the location of objects The new operator returns a reference to a new object
Rectangle box = new Rectangle(); Multiple object variables can refer to the same object
Rectangle box = new Rectangle(5, 10, 20, 30);Rectangle box2 = box;box2.translate(15, 25);
Primitive type variables ≠ object variables
![Page 7: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/7.jpg)
Cast
(typeName) expression
Example: (int) (balance * 100)
Purpose: To convert an expression to a different type
7
![Page 8: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/8.jpg)
Constants: final
A final variable is a constant
Once its value has been set, it cannot be changed
Named constants make programs easier to read and maintain
Convention: use all-uppercase names for constants
final double QUARTER_VALUE = 0.25;final double DIME_VALUE = 0.1;
8
![Page 9: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/9.jpg)
Constants: static final
static is used with class members If constant values are needed in several methods, declare them
together and tag them as static and final Give static final constants public access to enable other classes to
use thempublic class Math{. . .public static final double E = 2.7182818284590452354;public static final double PI = 3.14159265358979323846;}
double circumference = Math.PI * diameter; (call without object)9
![Page 10: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/10.jpg)
Syntax : Constant Definition
In a method: final typeName variableName = expression ;
In a class: accessSpecifier static final typeName variableName = expression;
Example: final double NICKEL_VALUE = 0.05; public static final double LITERS_PER_GALLON = 3.785; Purpose: To define a constant in a method or a class10
![Page 11: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/11.jpg)
Increment, and Decrement
items++ is the same as items = items + 1 items-- subtracts 1 from items
++a; --a; a++; a--;
11
![Page 12: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/12.jpg)
Arithmetic Operations
/ is the division operator
If both arguments are integers, the result is an integer. The remainder is discarded– 7.0 / 4 yields 1.75– 7 / 4 yields 1
Get the remainder with % (pronounced "modulo")7 % 4 is 312
![Page 13: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/13.jpg)
The Math class
Math class: contains methods like sqrt and pow
To compute xn, you write Math.pow(x, n)
However, to compute x2 it is significantly more efficient simply to compute x * x
To take the square root of a number x, use the Math.sqrt; for example,
Math.sqrt(x)
13
Java.lang.Math
![Page 14: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/14.jpg)
Mathematical Methods in Java
14
Math.sqrt(x) square root
Math.pow(x, y) power xy
Math.exp(x) ex
Math.log(x) natural log
Math.sin(x), Math.cos(x), Math.tan(x) sine, cosine, tangent (x in radian)
Math.round(x) closest integer to x
Math.min(x, y), Math.max(x, y) minimum, maximum
![Page 15: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/15.jpg)
java.lang.Math methods
Constants: E, PI
sin(_), cos(_), abs(_), tan(_), ceil(_), floor(_), log(_), max(_,_), min(_,_), pow(_,_), sqrt(_), round(_), random(), toDegrees(_), toRadians(_)
15
![Page 16: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/16.jpg)
Self Check
What is the value of 1729 / 100? and 1729 % 100? What does the following statement compute ?
double average = 20 + 25 + 30 / 3; What is the value of Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))
in mathematical notation?Answers 17 and 29 Only 30 is divided by 3. To get the correct result, use
parentheses. Moreover, if all three are integers, you must divide by 3.0 to avoid integer division:(20 + 25 + 30) / 3.0
16
![Page 17: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/17.jpg)
Calling Static Methods
A static method does not operate on an object double x = 4;double root = x.sqrt(); // Error
Static methods are defined inside classes
Naming convention: Classes start with an uppercase letter; objects start with a lowercase letterMathSystem.out
17
![Page 18: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/18.jpg)
Static Method Call
ClassName. methodName(parameters)
Example: Math.sqrt(4)
Purpose: To invoke a static method (a method that
does not operate on an object) and supply its parameters18
![Page 19: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/19.jpg)
Self Check
Why can't you call x.pow(y) to compute xy ? Is the call System.out.println(4) a static
method call?
Answers x is a number, not an object, and you cannot
invoke methods on numbers No–the println method is called on the object
System.out19
![Page 20: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/20.jpg)
Strings
A string is a sequence of characters Strings are objects of the String class String constants:
"Hello, World!" String variables:
String message = "Hello, World!"; String length:
int n = message.length(); Empty string: ""
20
![Page 21: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/21.jpg)
Concatenation
Use the + operator: String name = "Dave";String message = "Hello, " + name;
// message is "Hello, Dave" If one of the arguments of the + operator is a
string, the other is converted to a string String a = "Agent";int n = 7;String bond = a + n; // bond is Agent7 21
![Page 22: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/22.jpg)
Converting between Strings and Numbers
Convert to number:int n = Integer.parseInt(str);double x = Double.parseDouble(x);
int num = Integer.parseInt("1234");
Convert to string:String str = "" + n;str = Integer.toString(n); String str = String.valueOf(num);22
![Page 23: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/23.jpg)
Substrings
String greeting = "Hello, World!";String sub = greeting.substring(0, 5);
// sub is "Hello"
Supply start and end positions, end is not included
First position is at 023
![Page 24: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/24.jpg)
Self Check
Assuming the String variable s holds the value "Agent", what is the effect of the assignment s = s + s.length() ?
Assuming the String variable river holds the value "Mississippi", what is the value of river.substring(1, 2)? and river.substring(2, river.length() - 3)?
Answers s is set to the string Agent5 The strings "i" and "ssissi"
24
![Page 25: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/25.jpg)
Frame Windows
The JFrame class JFrame frame = new JFrame();
frame.setSize(300, 400);frame.setTitle("An Empty Frame");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);
import javax.swing.*;
25
![Page 26: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/26.jpg)
Frame program
import javax.swing.*; public class frame{
public static void main(String[] args){
JFrame frame = new JFrame(); final int FRAME_WIDTH = 300; final int FRAME_HEIGHT = 400; frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setTitle("An Empty Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
}}26
![Page 27: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/27.jpg)
Self Check
How do you display a square frame with a title bar that reads "Hello, World!"?
How can a program display two frames at once?
Answers Modify the EmptyFrameViewer program as follows:
frame.setSize(300, 300);frame.setTitle("Hello, World!");
Construct two JFrame objects, set each of their sizes, and call setVisible(true) on each of them
27
![Page 28: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/28.jpg)
Drawing Shapes
paintComponent: called whenever the component needs to be repainted:
public class frame1 extends JComponent{
public void paintComponent(Graphics g){
// Recover Graphics2DGraphics2D g2 = (Graphics2D) g;
. . .}
} 28
![Page 29: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/29.jpg)
Drawing Shapes
Graphics class lets you manipulate the graphics state (such as current color)
Graphics2D class has methods to draw shape objects
Use a cast to recover the Graphics2D object from the Graphics parameter Rectangle box = new Rectangle(5, 10, 20, 30);g2.draw(box);
java.awt package29
![Page 30: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/30.jpg)
Rectangle Drawing Program Classes
frame1: its paintComponent method produces the drawing frame: its main method constructs a frame and a frame1, adds the
component to the frame, and makes the frame visible – Construct a frame– Construct an object of your component class:
frame1 component = new frame1();– Add the component to the frame
frame.add(component); However, if you use an older version of Java (before Version 5), you must make a slightly more complicated call: frame.getContentPane().add(component);
– Make the frame visible
30
![Page 31: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/31.jpg)
An example (produce a drawing with two boxes)
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JPanel; import javax.swing.Jcomponent; /** A component that draws two rectangles. */
public class frame1 extends Jcomponent { public void paintComponent(Graphics g) {Graphics2D g2 = (Graphics2D) g; // Recover Graphics2D Rectangle box = new Rectangle(5, 10, 20, 30); // Construct a rectangle andg2.draw(box); // draw it box.translate(15, 25); // Move rectangle 15 units to the right and 25 units down g2.draw(box); // Draw moved rectangle } }31
![Page 32: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/32.jpg)
Create frame and add drawing
import javax.swing.JFrame; public class frame { public static void main(String[] args) { JFrame frame = new JFrame(); final int FRAME_WIDTH = 300; final int FRAME_HEIGHT = 400;frame.setSize(FRAME_WIDTH,FRAME_HEIGHT); frame.setTitle("Two rectangles");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame1 component = new frame1(); frame.add(component); frame.setVisible(true);
} }32
![Page 33: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/33.jpg)
Self Check
How do you modify the program to draw two squares? How do you modify the program to draw one rectangle and one
square? What happens if you call g.draw(box) instead of g2.draw(box)?
Answers Rectangle box = new Rectangle(5, 10, 20, 20); Replace the call to box.translate(15, 25) with
box = new Rectangle(20, 35, 20, 20); The compiler complains that g doesn't have a draw method
33
![Page 34: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/34.jpg)
Applets
This is almost the same outline as for a component, with two minor differences:
– You extend JApplet, not JComponent– You place the drawing code inside the paint method, not inside
paintComponent
To run an applet, you need an HTML file with the applet tag
You view applets with the appletviewer
34
![Page 35: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/35.jpg)
JApplet
/*<APPLET CODE="frameapplet.class" WIDTH=350 HEIGHT=200></APPLET>*/import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JApplet; /** An applet that draws two rectangles. */ public class frameapplet extends JApplet { public void paint(Graphics g) { // Prepare for extended graphics
Graphics2D g2 = (Graphics2D) g; // Construct a rectangle and draw it Rectangle box = new Rectangle(5, 10, 20, 30); g2.draw(box); // Move rectangle 15 units to the right and 25 units down box.translate(15, 25); // Draw moved rectangle g2.draw(box);
} } 35
![Page 36: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/36.jpg)
Graphical Shapes
Rectangle, Ellipse2D.Double, and Line2D.Double describe graphical shapes
We won't use the .Float classes
These classes are inner classes–doesn't matter to us except for the import statement:
import java.awt.geom.Ellipse2D; // no .Double
Must construct and draw the shape Ellipse2D.Double ellipse = new Ellipse2D.Double(x, y, width, height);g2.draw(ellipse); 36
![Page 37: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/37.jpg)
Drawing Lines
To draw a line:
Line2D.Double segment = new Line2D.Double(x1, y1, x2, y2);
or
Point2D.Double from = new Point2D.Double(x1, y1);Point2D.Double to = new Point2D.Double(x2, y2);Line2D.Double segment = new Line2D.Double(from, to);
37
![Page 38: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/38.jpg)
Self Check
Give instructions to draw a circle with center (100,100) and radius 25 Give instructions to draw a letter "V" by drawing two line segments Give instructions to draw a string consisting of the letter "V"
Answers g2.draw(new Ellipse2D.Double(75, 75, 50, 50); Line2D.Double segment1 = new Line2D.Double(0, 0, 10, 30);
g2.draw(segment1);Line2D.Double segment2 = new Line2D.Double(10, 30, 20, 0);g2.draw(segment2);
g2.drawString("V", 0, 30);
38
Upper-left corner, Width , Height
![Page 39: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/39.jpg)
Colors
Standard colors Color.BLUE, Color.RED, Color.PINK etc.
Specify red, green, blue between 0.0F and 1.0F Color magenta = new Color(1.0F, 0.0F, 1.0F); // F = float
Set color in graphics context
g2.setColor(magenta);Color is used when drawing and filling shapes
g2.fill(rectangle); // filled with current color
39
![Page 40: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/40.jpg)
Self Check
What are the RGB color values of Color.BLUE? How do you draw a yellow square on a red background?
Answers 0.0F, 0.0F, and 0.1F First fill a big red square, then fill a small yellow square inside:
g2.setColor(Color.RED);g2.fill(new Rectangle(0, 0, 200, 200));g2.setColor(Color.YELLOW);g2.fill(new Rectangle(50, 50, 100, 100));
Note: Use import java.awt.Color;40
![Page 41: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/41.jpg)
Drawing Graphical Shapes
Rectangle leftRectangle = new Rectangle(100, 100, 30, 60);
Rectangle rightRectangle = new Rectangle(160, 100, 30, 60);
Line2D.Double topLine= new Line2D.Double(130, 100, 160, 100);
Line2D.Double bottomLine= new Line2D.Double(130, 160, 160, 160);41
![Page 42: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/42.jpg)
Reading Text Input
A graphical application can obtain input by displaying a JOptionPane
The showInputDialog method displays a prompt and waits for user input
The showInputDialog method returns the string that the user typed String input = JOptionPane.showInputDialog("Enter x");double x = Double.parseDouble(input);
42
![Page 43: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/43.jpg)
An Example
import java.awt.Color; import javax.swing.Jframe; import javax.swing.JOptionPane; import javax.swing.JComponent;
public class ColorViewer { public static void main(String[] args) {
JFrame frame = new JFrame(); final int FRAME_WIDTH = 300; final int FRAME_HEIGHT = 400; frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String input; // Ask the user for red, green, blue values input = JOptionPane.showInputDialog("red:"); double red = Double.parseDouble(input); input = JOptionPane.showInputDialog("green:"); double green = Double.parseDouble(input); input = JOptionPane.showInputDialog("blue:"); double blue = Double.parseDouble(input);
Color fillColor = new Color( (float) red, (float) green, (float) blue); ColoredSquarecomponent = new ColoredSquare (fillColor); frame.add(component); frame.setVisible(true); } }43
![Page 44: Lec 9 05_sept [compatibility mode]](https://reader033.vdocuments.site/reader033/viewer/2022060117/55879118d8b42a6e0b8b457c/html5/thumbnails/44.jpg)
Example cont.
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JComponent;
public class ColoredSquare extends Jcomponent {private Color fillColor; public ColoredSquare (Color aColor) { fillColor = aColor; }
public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; // Select color into graphics contextg2.setColor(fillColor); // Const and fill a square whose center is center of the window final int SQUARE_LENGTH = 100; Rectangle square = new Rectangle((getWidth() - SQUARE_LENGTH) / 2, (getHeight()SQUARE_LENGTH) / 2, SQUARE_LENGTH, SQUARE_LENGTH); g2.fill(square); }
}44