Вы находитесь на странице: 1из 41

Chapter 25 - Beyond C & C++:

Operators, Methods, and Arrays in Java


Outline
25.1 Introduction
25.2 Primitive Data Types and Keywords
25.3 Logical Operators
25.4 Method Definitions
25.5 Java API Packages
25.6 Random Number Generation
25.7 Example: A Game of Chance
25.8 Methods of Class JApplet
25.9 Declaring and Allocating Arrays
25.10 Examples Using Arrays
25.11 References and Reference Parameters
25.12 Multiple-Subscripted Arrays

 2000 Prentice Hall, Inc. All rights reserved.


25.1 Introduction
• In this chapter
– Differences between C, C++, and Java
– Java's logical operators and methods
– Packages that comprise Applications Programming Interface
(API)
– Craps simulator
– Random numbers in Java
– Arrays in Java

 2000 Prentice Hall, Inc. All rights reserved.


25.2 Primitive Data Types and Keywords
• Primitive data types
– char, byte, short, int, long, float, double,
boolean
– Building blocks for more complicated types
• All variables must have a type before being used
• Strongly typed language
– Primitive types portable, unlike C and C++
• In C/C++, write different versions of programs
– Data types not guaranteed to be identical
– ints may be 2 or 4 bytes, depending on system
• WORA - Write once, run anywhere
– Default values
• boolean gets false, all other types are 0

 2000 Prentice Hall, Inc. All rights reserved.


25.2 Primitive Data Types and Keywords (II)

Typ e Size in Va lu e s Sta n d a rd


b its
boolean 8 true or false
char 16 ’\u0000’ to ’\uFFFF’ (ISO Unicode
character set)
byte 8 –128 to +127
short 16 –32,768 to +32,767
int 32 –2,147,483,648 to
+2,147,483,647
long 64 –9,223,372,036,854,775,808
to
+9,223,372,036,854,775,807
float 32 –3.40292347E+38 to (IEEE 754
+3.40292347E+38 floating point)
double – (IEEE 754
64 1.79769313486231570E+308 floating point)
to
+1.79769313486231570E+30
8

 2000 Prentice Hall, Inc. All rights reserved.


25.2 Primitive Data Types and Keywords (III)
• Keywords
– Reserved names, cannot be used as identifiers
– Used to implement features
Ja va Ke yw o rd s

abstract boolean break byte case


catch char class continue default
do double else extends false
final finally float for if
implements import instanceof int interface
long native new null package
private protected public return short
static super switch synchronized this
throw throws transient true try
void volatile while
Keywords that
are reserved
but not used
by Java
const goto

 2000 Prentice Hall, Inc. All rights reserved.


25.3 Logical Operators
• Logical operators
– Form complex conditions and control structures
– Logical AND (&&)
• true if both conditions true
– Logical OR (||)
• true if either condition true
• true if both conditions true (inclusive)
• If left condition true, skips right condition
– Boolean logical AND (&) , boolean logical inclusive OR (|)
• Act like counterparts, but always evaluate both expressions
• Useful if expression performs action:
birthday == true | ++age >= 65

 2000 Prentice Hall, Inc. All rights reserved.


25.3 Logical Operators (II)
• Logical Operators (continued)
– Boolean logical exclusive OR (^)
• true if exactly one condition true
• false if both conditions true
– Logical NOT (negation)
• Unary operator (one operand)
– All other logical operators binary (two operands)
• Reverses condition
• If true, returns false
• If false, returns true
• != - "does not equal"
if (grade != sentinelValue)

 2000 Prentice Hall, Inc. All rights reserved.


25.3 Logical Operators (III)
• More GUI Classes (javax.swing)
– JTextArea
• Create an area where text can be displayed
• Provide (rows, columns) to constructor to specify size
JTextArea myArea; //declares object type
myArea = new JTextArea( 17, 20 ); //initialize
– myArea.setText( myString );
• Sets the text of myArea to myString
– JScrollPane
• Creates a window that can scroll
JScrollPane myScroller =
new JScrollPane ( myArea );
• Declaration and initialization, allows myArea have scrolling

 2000 Prentice Hall, Inc. All rights reserved.


25.3 Logical Operators (IV)
• More GUI classes
– showMessageDialog(null, myScroller,
titleString, type);
• Second argument indicates that myScroller (and attached
myArea) should be displayed in message dialog

 2000 Prentice Hall, Inc. All rights reserved.


1 // Fig. 25.7: LogicalOperators.java
2 // Demonstrating the logical operators Outline
3 import javax.swing.*;
4
5 public class LogicalOperators {
6 public static void main( String args[] ) 1. Class definition
7 {
8 JTextArea outputArea = new JTextArea( 17, 20 );
9 JScrollPane scroller = new JScrollPane( outputArea ); 1.1 Initialize objects
10 String output = ""; (JTextArea,
11 JScrollPane)
12 output += "Logical AND (&&)" +
13 "\nfalse && false: " + ( false && false ) +
14 "\nfalse && true: " + ( false && true ) + 1.2 Declare String
15 "\ntrue && false: " + ( true && false ) +
16 "\ntrue && true: " + ( true && true );
17
1.3 Append logical
18 output += "\n\nLogical OR (||)" + operator statements
19 "\nfalse || false: " + ( false || false ) +
20 "\nfalse || true: " + ( false || true ) +
21 "\ntrue || false: " + ( true || false ) +
22 "\ntrue || true: " + ( true || true );
23
24 output += "\n\nBoolean logical AND (&)" +
25 "\nfalse & false: " + ( false & false ) +
26 "\nfalse & true: " + ( false & true ) +
27 "\ntrue & false: " + ( true & false ) +
28 "\ntrue & true: " + ( true & true );
29
30 output += "\n\nBoolean logical inclusive OR (|)" +
 2000 Prentice Hall, Inc. All rights reserved.
31 "\nfalse | false: " + ( false | false ) +
32 "\nfalse | true: " + ( false | true ) + Outline
33 "\ntrue | false: " + ( true | false ) +
34 "\ntrue | true: " + ( true | true );
35
2. Add output to
36 output += "\n\nBoolean logical exclusive OR (^)" +
37 "\nfalse ^ false: " + ( false ^ false ) +
outputArea
38 "\nfalse ^ true: " + ( false ^ true ) +
39 "\ntrue ^ false: " + ( true ^ false ) + 2.1
40 "\ntrue ^ true: " + ( true ^ true ); showMessageDialog
41 (notice second argument)
42 output += "\n\nLogical NOT (!)" +
43 "\n!false: " + ( !false ) +
2.2 System.exit
44 "\n!true: " + ( !true );
45
required for programs
46 outputArea.setText( output );
with GUIs
47 JOptionPane.showMessageDialog( null, scroller,
48 "Truth Tables", JOptionPane.INFORMATION_MESSAGE );
49 System.exit( 0 );
50 }
51 }

 2000 Prentice Hall, Inc. All rights reserved.


Outline

Program Output

 2000 Prentice Hall, Inc. All rights reserved.


25.4 Method Definitions
• Method definition format
return-value-type method-name( parameter-list )
{
declarations and statements
}
– Method-name: any valid identifier
– Return-value-type: data type of the result
• void - method returns nothing
• Can return at most one value
– Parameter-list: comma separated list, declares parameters
• Method call must have proper number and type of parameters
– Declarations and statements: method body (block)
• Variables can be declared inside blocks (can be nested)
• Method cannot be defined inside another function

 2000 Prentice Hall, Inc. All rights reserved.


25.4 Method Definitions (II)
• Program control
– When method call encountered
• Control transferred from point of invocation to method
– Returning control
• If nothing returned: return;
– Or until reaches right brace
• If value returned: return expression;
– Returns the value of expression
– Example user-defined method:
public int square( int y )
{
return y * y
}

 2000 Prentice Hall, Inc. All rights reserved.


25.4 Method Definitions (III)
• Calling methods
– Three ways
• Method name and arguments
– Can be used by methods of same class
– square( 2 );
• Dot operator - used with objects
– g.drawLine( x1, y1, x2, y2 );
• Dot operator - used with static methods of classes
– Integer.parseInt( myString );
– More Chapter 26

 2000 Prentice Hall, Inc. All rights reserved.


25.4 Method Definitions (IV)
• More GUI components
– Content Pane - on-screen display area
• Attach GUI components to it to be displayed
• Object of class Container (java.awt)
– getContentPane
• Method inherited from JApplet
• Returns reference to Content Pane
Container c = getContentPane();
– Container method add
• Attaches GUI components to content pane, so they can be
displayed
• For now, only attach one component (occupies entire area)
• Later, learn how to add and layout multiple components
c.add( myTextArea );
 2000 Prentice Hall, Inc. All rights reserved.
1 // Fig. 25.8: SquareInt.java
2 // A programmer-defined square method Outline
3 import java.awt.Container;
4 import javax.swing.*;
5
6 public class SquareInt extends JApplet { 1. init
7 public void init()
8 {
9 String output = ""; 1.1 Initialize variables
10
11 JTextArea outputArea = new JTextArea( 10, 20 );
1.2 JTextArea object
12
13 // get the applet's GUI component display area
14 Container c = getContentPane(); 1.3 Container object
15
16 // attach outputArea to Container c
17 c.add( outputArea ); 1.4 Attach outputArea
18 to Content Pane
19 int result;
20
21 for ( int x = 1; x <= 10; x++ ) {
2. Call method
22 result = square( x );
23 output += "The square of " + x + 2.1 Set text of output
24 " is " + result + "\n";
25 }
26
27 outputArea.setText( output );
28 }
29
30 // square method definition
 2000 Prentice Hall, Inc. All rights reserved.
31 public int square( int y )

32 { Outline
33 return y * y;

34 }
3. Method definition
35 }

Program Output

 2000 Prentice Hall, Inc. All rights reserved.


25.5 Java API Packages
• As we have seen
– Java has predefined, grouped classes called packages
– Together, all the packages are the Applications
Programming Interface (API)
– Fig 25.10 has a list of the packages in the API
• Import
– Import statements specify location of classes
– Large number of classes, avoid reinventing the wheel

 2000 Prentice Hall, Inc. All rights reserved.


25.6 Random Number Generation
• Math.random()
– Returns a random double,greater than or equal to 0.0,
less than 1.0
• Scaling and shifting
n = a + (int) ( Math.random() * b )
n = random number
a = shifting value
b = scaling value
In C we used %, but in Java we can use *
For a random number between 1 and 6,
n = 1 + (int) ( Math.random() * 6 )

 2000 Prentice Hall, Inc. All rights reserved.


25.7 Example: A Game of Chance
• Redo "craps" simulator from Chapter 5
• Rules
– Roll two dice
• 7 or 11 on first throw, player wins
• 2, 3, or 12 on first throw, player loses
• 4, 5, 6, 8, 9, 10 - value becomes player's "point"
– player must roll his point before rolling 7 to win

 2000 Prentice Hall, Inc. All rights reserved.


25.7 Example: A Game of Chance (II)
• User input
– Till now, used message dialog and input dialog
• Tedious, only show one message/ get one input at a time
– Now, we will use event handling for more complex GUI
• extends keyword
– Class inherits data and methods from another class
– A class can also implement an interface
• Keyword implements
• Interface - specifies methods you must define in your class
• Event handling
– Event: user interaction (i.e., user clicking a button)
– Event handler: method called in response to an event

 2000 Prentice Hall, Inc. All rights reserved.


25.7 Example: A Game of Chance (III)
• Interface ActionListener
– Requires that you define method actionPerformed
• actionPerformed is the event handler
• Class JTextField
– Can display or input a line of text
• Class JButton
– Displays a button which can perform an action if pushed
– Method addActionListener( this );
• Specifies this applet should listen for events from the
JButton object
– Each component must know which method will handle its
events
• Registering the event handler
 2000 Prentice Hall, Inc. All rights reserved.
25.7 Example: A Game of Chance (IV)
• Class JButton (continued)
– We registered this applet with our JButton
• The applet "listens" for events from the
– actionPerformed is the event handler
• Event-driven programming
– User's interaction with GUI drives program
• final
– Declares a variable constant
• Cannot be modified
• Must be initialized at declaration
• const int MYINT = 3;
• Use all uppercase for final variables

 2000 Prentice Hall, Inc. All rights reserved.


25.7 Example: A Game of Chance (V)
• Methods of class Container
– Recall that the Content Pane is of class Container
– Method setLayout
• Define layout managers (determine position and size of all
components attached to container)
• FlowLayout - Most basic layout manager
– Items placed left to right in order added to container
– When end of line reached, continues on next line

c = getContentPane();
c.setLayout( new FlowLayout() );

Initialized with object of class FlowLayout

 2000 Prentice Hall, Inc. All rights reserved.


1 // Fig. 25.13: Craps.java
2 // Craps Outline
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6 1. import
7 public class Craps extends JApplet implements ActionListener {
8 // constant variables for status of game
9 final int WON = 0, LOST = 1, CONTINUE = 2; 2. Define class
10 (implements)
11 // other variables used in program
12 boolean firstRoll = true; // true if first roll
2.1 Initialize variables
13 int sumOfDice = 0; // sum of the dice
and objects
14 int myPoint = 0; // point if no win/loss on first roll
15 int gameStatus = CONTINUE; // game not over yet
16 2.2 setLayout
17 // graphical user interface components
18 JLabel die1Label, die2Label, sumLabel, pointLabel;
19 JTextField firstDie, secondDie, sum, point;
20 JButton roll;
21
22 // setup graphical user interface components
23 public void init()
24 {
25 Container c = getContentPane();
26 c.setLayout( new FlowLayout() );
27
28 die1Label = new JLabel( "Die 1" );
29 c.add( die1Label );
30 firstDie = new JTextField( 10 );
 2000 Prentice Hall, Inc. All rights reserved.
31 firstDie.setEditable( false );
32 c.add( firstDie ); Outline
33
34 die2Label = new JLabel( "Die 2" );
35 c.add( die2Label );
36 secondDie = new JTextField( 10 ); 2.3 add components to
37 secondDie.setEditable( false ); GUI
38 c.add( secondDie );
39
40 sumLabel = new JLabel( "Sum is" );
41 c.add( sumLabel ); 2.4
42 sum = new JTextField( 10 );
addActionListener
43 sum.setEditable( false );
44 c.add( sum );
45 3. Define
46 pointLabel = new JLabel( "Point is" ); actionPerformed
47 c.add( pointLabel );
(event handler)
48 point = new JTextField( 10 );
49 point.setEditable( false );
50 c.add( point );
51
52 roll = new JButton( "Roll Dice" );
53 roll.addActionListener( this );
54 c.add( roll );
55 }
56
57 // call method play when button is pressed
58 public void actionPerformed( ActionEvent e )
59 {
60 play();

 2000 Prentice Hall, Inc. All rights reserved.


61 }
62 Outline
63 // process one roll of the dice
64 public void play()
65 {
66 if ( firstRoll ) { // first roll of the dice 3.1 Define play
67 sumOfDice = rollDice();
68
69 switch ( sumOfDice ) { 3.2 switch
70 case 7: case 11: // win on first roll
71 gameStatus = WON;
72 point.setText( "" ); // clear point text field
73 break;
74 case 2: case 3: case 12: // lose on first roll
75 gameStatus = LOST;
76 point.setText( "" ); // clear point text field
77 break;
78 default: // remember point
79 gameStatus = CONTINUE;
80 myPoint = sumOfDice;
81 point.setText( Integer.toString( myPoint ) );
82 firstRoll = false;
83 break;
84 }
85 }
86 else {
87 sumOfDice = rollDice();
88
89 if ( sumOfDice == myPoint ) // win by making point
90 gameStatus = WON;
 2000 Prentice Hall, Inc. All rights reserved.
91 else
92 if ( sumOfDice == 7 ) // lose by rolling 7 Outline
93 gameStatus = LOST;
94 }
95
96 if ( gameStatus == CONTINUE )
97 showStatus( "Roll again." );
3.3 Define rollDice
98 else {
99 if ( gameStatus == WON )
100 showStatus( "Player wins. " +
101 "Click Roll Dice to play again." );
102 else
103 showStatus( "Player loses. " +
104 "Click Roll Dice to play again." );
105
106 firstRoll = true;
107 }
108 }
109
110 // roll the dice
111 public int rollDice()
112 {
113 int die1, die2, workSum;
114
115 die1 = 1 + ( int ) ( Math.random() * 6 );
116 die2 = 1 + ( int ) ( Math.random() * 6 );
117 workSum = die1 + die2;
118
119 firstDie.setText( Integer.toString( die1 ) );
120 secondDie.setText( Integer.toString( die2 ) );
 2000 Prentice Hall, Inc. All rights reserved.
121 sum.setText( Integer.toString( workSum ) );
122 Outline
123 return workSum;
124 }
125 }

Program Output

 2000 Prentice Hall, Inc. All rights reserved.


25.8 Methods of Class JApplet
• Methods of Class JApplet
– init, start, stop, paint, destroy
– Called automatically during execution
– By default, have empty bodies
– Must define yourself, using proper first line
• Otherwise, will not be called automatically
• See Figure 25.14 for proper first lines
• Method repaint
– Dynamically change appearance of applet
– Cannot call paint (do not have a Graphics object)
– repaint(); calls update which passes Graphics
object for us
• Erases previous drawings and calls paint

 2000 Prentice Hall, Inc. All rights reserved.


25.8 Methods of Class JApplet (II)

First line of JApplet methods (descriptions Fig. 25.14)

public void init()


public void start()
public void paint( Graphics g )
public void stop()
public void destroy()

 2000 Prentice Hall, Inc. All rights reserved.


25.9 Declaring and Allocating Arrays
• Arrays
– Specify type, use new operator
– Two steps:
int c[]; //declaration
c = new int[ 12 ]; //initialization
– One step:
int c[] = new int[12];
– Primitive elements initialized to zero or false
• Non-primitive references are null
– Multiple declarations:
String b[] = new String[ 100 ], x[] = new String[ 27 ];
Also:
double[] array1, array2;
Put brackets after data type
 2000 Prentice Hall, Inc. All rights reserved.
25.10 Examples Using Arrays
• new
– Dynamically creates arrays
• Method length
– Returns length of the array
myArray.length
• Initializer lists
int myArray[] = { 1, 2, 3, 4, 5 };
• new operator not needed, provided automatically

 2000 Prentice Hall, Inc. All rights reserved.


1 // Fig. 25.21: RollDie.java
2 // Roll a six-sided die 6000 times Outline
3 import javax.swing.*;
4
5 public class RollDie {
6 public static void main( String args[] ) 1. Initialize array
7 {
8 int face, frequency[] = new int[ 7 ];
9 String output = ""; 1.1 Loop and generate
10 random numbers (note
11 for ( int roll = 1; roll <= 6000; roll++ ) { scaling)
12 face = 1 + ( int ) ( Math.random() * 6 );
13 ++frequency[ face ];
14 } 1.2 Append output
15
16 output += "Face\tFrequency";
1.3 Initialize
17
outputArea
18 for ( face = 1; face < frequency.length; face++ )
19 output += "\n" + face + "\t" + frequency[ face ];
20 2.
21 JTextArea outputArea = new JTextArea( 7, 10 ); showMessageDialog
22 outputArea.setText( output );
23
24 JOptionPane.showMessageDialog( null, outputArea,
25 "Rolling a Die 6000 Times",
26 JOptionPane.INFORMATION_MESSAGE );
27
28 System.exit( 0 );
29 }
30 }
 2000 Prentice Hall, Inc. All rights reserved.
Outline

Program Output

 2000 Prentice Hall, Inc. All rights reserved.


25.11 References and Reference Parameters
• Passing arguments to methods
– Call-by-value: pass copy of argument
– Call-by-reference: pass original argument
• Improve performance, weaken security
• In Java, cannot choose how to pass arguments
– Primitive data types passed call-by-value
– References to objects passed call-by-reference
• Original object can be changed in method
– Arrays in Java treated as objects
• Passed call-by-reference

 2000 Prentice Hall, Inc. All rights reserved.


25.12 Multiple-Subscripted Arrays
• Multiple-Subscripted Arrays
– Represent tables
• Arranged by m rows and n columns (m by n array)
• Can have more than two subscripts
– Java does not support multiple subscripts directly
• Create an array with arrays as its elements
• Array of arrays
• Declaration
– Double brackets
int b[][];
b = new int[ 3 ][ 3 ];
• Declares a 3 by 3 array

 2000 Prentice Hall, Inc. All rights reserved.


25.12 Multiple-Subscripted Arrays (II)
• Declaration (continued)
– Initializer lists
int b[][] = { { 1, 2 }, { 3, 4 } };

1 2
3 4

– Each row can have a different number of columns:


int b[][];
b = new int[ 2 ][ ]; // allocate rows
b[ 0 ] = new int[ 5 ]; // allocate columns for row 0
b[ 1 ] = new int[ 3 ]; // allocate columns for row 1

– Notice how b[ 0 ] is initialized as a new int array


 2000 Prentice Hall, Inc. All rights reserved.
1 // Fig. 25.23: InitArray.java
2 // Initializing multidimensional arrays Outline
3 import java.awt.Container;
4 import javax.swing.*;
5
6 public class InitArray extends JApplet { 1. Define class
7 JTextArea outputArea;
8
9 // initialize the applet 1.1 init
10 public void init()
11 { 1.2 Initialize double-
12 outputArea = new JTextArea(); scripted arrays
13 Container c = getContentPane();
14 c.add( outputArea );
15
16 int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
17 int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };
18
19 outputArea.setText( "Values in array1 by row are\n" );
20 buildOutput( array1 );
21
22 outputArea.append( "\nValues in array2 by row are\n" );
23 buildOutput( array2 );
24 }
25
26 public void buildOutput( int a[][] )
27 {
28 for ( int i = 0; i < a.length; i++ ) {
29
30 for ( int j = 0; j < a[ i ].length; j++ )
 2000 Prentice Hall, Inc. All rights reserved.
31 outputArea.append( a[ i ][ j ] + " " );
32 Outline
33 outputArea.append( "\n" );
34 }
35 }
36 }

Program Output

 2000 Prentice Hall, Inc. All rights reserved.

Вам также может понравиться