• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Lec 9 05_sept [compatibility mode]
 

Lec 9 05_sept [compatibility mode]

on

  • 183 views

 

Statistics

Views

Total Views
183
Views on SlideShare
169
Embed Views
14

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 14

http://www.palak.pw 14

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Lec 9 05_sept [compatibility mode] Lec 9 05_sept [compatibility mode] Presentation Transcript

    • Math and String Classes Lecture 9 Naveen Kumar
    • 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);
    • Constructing Objects Default constructor  new Rectangle() // constructs a rectangle with its top-left corner // at the origin (0, 0), width 0, and height 0
    • 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()); } }
    • 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;
    • 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
    • Cast  (typeName) expression Example:  (int) (balance * 100) Purpose:  To convert an expression to a different type 7
    • 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
    • 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 them public 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
    • 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 class 10
    • Increment, and Decrement  items++ is the same as items = items + 1  items-- subtracts 1 from items  ++a;  --a;  a++;  a--; 11
    • 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
    • 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
    • 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
    • java.lang.Math methods Constants: E, PI  sin(_), cos(_), abs(_), tan(_),  ceil(_), floor(_), log(_),  max(_,_), min(_,_), pow(_,_), sqrt(_),  round(_), random(),  toDegrees(_), toRadians(_) 15
    • 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
    • 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 letter Math System.out 17
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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 0 23
    • 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
    • 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
    • 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
    • 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
    • Drawing Shapes  paintComponent: called whenever the component needs to be repainted: public class frame1 extends JComponent { public void paintComponent(Graphics g) { // Recover Graphics2D Graphics2D g2 = (Graphics2D) g; . . . } } 28
    • 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
    • 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
    • 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 and g2.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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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 context g2.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