Download Workshop on Java Programming

Document related concepts
no text concepts found
Transcript
Workshop on Java
Programming
September 29, October 13,
October 20
YANPING CHEN
[email protected]
1
Introduction to ObjectOriented Programming
Concepts
2
Software Life Cycle
• Steps in software development
–
–
–
–
–
–
Problem specification
Algorithm development
Coding
Testing
Debugging
Maintenance
• Documenting is an activity that
occurs throughout the cycle
3
Problem Specification
• The goal – use computer to
solve problems
• Problems are usually stated in
natural language
• Software designer extracts the
exact problem specification
from the informal problem -requirements analysis
4
Understand the Problem
• Clarify
– What data is given (available for
use when the problem-solving
takes place)
– What results are required
– What assumptions are safe to
make
– What constraints must be obeyed
5
Example 1
Informal statement
John wants to know the total and
average cost of the three books he
just bought.
Givens: descriptions and names of
the values that are know
A, B, C numbers representing the
cost of each of John’s books
Results: descriptions and names of
the values to be computed from
the givens
– SUM, the sum of A, B and C
– AVG, the average of A, B, C
6
Example 2
Informal statement
Write an algorithm that takes four
scores (each out of 25) and computes
their average (out of 100)
Givens: descriptions and names of
the values that are know
A, B, C, D numbers representing the
four scores
Results: descriptions and names of
the values to be computed from
the givens
– AVG, the average of A, B, C, D
out of 100
7
Algorithm
• An algorithm is a solution for a
problem
• An algorithm’s HEADER specifies
the name of the algorithm, an order
for the givens and an order for the
results
• An algorithm’s BODY is a sequence
of instructions which, when
executed, computes the desired
results from the givens.
• Algorithms are written in
“pseudocode”. A precise notation
convenient for people but not
executable by computers.
8
Intermediate Variables
• Often it is useful within an
algorithm to use a variable that
is neither a given nor a result to
temporarily hold a value.
• Intermediate variables’ values
are not returned to the calling
statement, nor are they
remembered from one call to
the next.
9
Algorithm for Example1
• GIVENS: numbers A, B, C
• RESULTS:
– SUM, the sum of A, B and C
– AVG, the average of A, B and C
• HEADER
Alg1(A, B, C)
Return: (Sum, Avg)
• BODY
– Sum = A+B+C
– Avg = Sum /3
10
Algorithm for Example2
• GIVENS: numbers A, B, C, D
• RESULTS:
– AVG, the average of A, B, C and D out
of 100
• HEADER
Alg2(A, B, C, D)
Return: (Avg)
• BODY
– Sum = A + B + C + D //an
Intermediate Variable
– Avg = Sum /4/25*100
11
Tracing an Algorithm
• To TRACE an algorithm is to
execute it by hand, one
statement at a time, keeping
track of the value of each
variable.
• The aim is either to see what
results the algorithm produces
or to locate “bugs” in the
algorithm.
12
Tracing Example
• Example 1
Avg
Alg1 (18, 25, 20)
• Example 2
Avg
Alg2 (18, 25, 20, 19)
13
Invoking an Algorithm
• To invoke an algorithm you use a
“call” statement which is identical to
the header except for the names of
the givens and results.
(X,Y) Alg1(10, 7, -2)
invokes algorithm Alg1 with givens
A=10, B=7, C=-2 and returns the
results in X(Sum) and Y(Avg)
• Information is passed between the
call statement and the algorithm
based on the ORDER of the givens
and results, not their names.
14
Coding
• Coding = translating an
algorithm into a particular
programming language so it can
be executed on a computer
• Be sure your algorithm is
correct before coding it by
tracing it on test data.
• Coding is largely a mechanical
process, not a creative one.
• Both algorithm development
and coding require very careful
attention to detail
15
Translating to Code
• To program is to first develop and
test algorithms in pseudocode and
then TRANSLATE them into code in
a programming language
• Translating algorithms into code is
very much a mechanical process,
involving only a few decisions.
• For each pseudocode block we will
see one foolproof way of translating
it to code. Algorithms are then
translated block by block.
16
Using Algorithms
• When developing an algorithm, it is
a good idea to make as much use as
possible of existing algorithms (ones
you have written or that are available
in a library)
• You can put a CALL statement to
any existing algorithm wherever it is
needed in the algorithm you are
developing. Be sure you get the
ORDER of the givens and results
correctly.
• To call an algorithm you need to
know its header but not how it works
– you must just trust that it works
correctly.
17
Information Passing
• When calling an algorithm the call
statement and the header must be
identical except for the names of the
givens and results. These are
matched one-to-one in the order they
appear.
CALL: (T, AvgOutOf25) Alg1(X,Y,Z)
HEADER: (Sum, Avg)
Alg1(A,B,C)
The arrow show how information is
passed.
18
Testing, Debugging and
Maintenance
• Testing = looking for errors
(“bugs”) in an algorithm or
program by executing it on test
data (givens) and checking the
correctness of the results.
• Debugging = locating and
correcting an error in an
algorithm or program
• Maintenance = changing an
algorithm or program that is in
use.
19
What is an Object?
An object is a software bundle of
variables and related methods
– Software objects are used to
model real-world objects
– Real-world objects share two
characteristics: They all have state
and behavior.
– Software objects also have state
and behavior. A software object
maintains its state in one or more
variables. And implements its
behavior with methods.
• A variable is an item of data named
by an identifier.
• A method is a function (subroutine)
associated with an object
20
Examples of Object
• Bicycles:
– States: current gear, current pedal
cadence, two wheels, number of
gears
– Behaviors: braking, accelerating,
slowing down, changing gears
• Dogs:
– States: name, color, breed, hungry
– Behaviors: barking, fetching,
wagging tail
21
What is a Message?
Software objects interact and
communicate with each other
using messages
– A single object alone is generally
not very useful. Instead, an object
usually appears as a component of
a larger program or application
that contains many other objects.
– Through the interaction of these
objects, programmers achieve
higher-order functionality and
more complex behavior.
22
What is a Message? (2)
• Messages provide two
important benefits.
– An object's behavior is expressed
through its methods, so message
passing supports all possible
interactions between objects.
– Objects don't need to be in the
same process or even on the same
machine to send and receive
messages back and forth to each
other.
23
Components of Message
(1)
• When object A wants object B
to perform one of B's methods,
object A sends a message to
object B
• Sometimes, the receiving object
needs more information so that
it knows exactly what to do
– when you want to change gears
on your bicycle, you have to
indicate which gear you want.
This information is passed along
with the message as parameters
24
Components of Message
(2)
• Three components that comprise a
message:
– The object to which the message is
addressed (YourBicycle)
– The name of the method to perform
(changeGears)
– Any parameters needed by the method
(lowerGear)
25
What is a Class? (1)
A class is a blueprint, or prototype, that
defines the variables and the
methods common to all objects of a
certain kind.
– In the real world, you often have many
objects of the same kind. For example,
your bicycle is just one of many
bicycles in the world.
– Bicycles have some state and behavior
in common. However, each bicycle's
state is independent of and can be
different from that of other bicycles.
– Using o-o terminology, we say that
your bicycle object is an instance of the
class of objects known as bicycles.
26
What is a Class? (2)
– In object-oriented software, it's
also possible to have many
objects of the same kind that
share characteristics: rectangles,
employee records, video clips,
and so on. Objects of the same
kind are similar and you can
create a blueprint for those
objects.
27
Class and Instance (1)
• After create the bicycle class, you
can create any number of bicycle
objects from the class.
• When create an instance of a class,
the system allocates enough memory
for the object and all its instance
variables.
• Each instance gets its own copy of
all the instance variables defined in
the class.
28
Class and Instance (2)
• Variables:
– Class variable: contains information
that is shared by all instances of the
class
– Instance variable: contains information
for one specific instance
• Methods
– Class methods: invoked directly from
the class.
– Instance methods: invoked on a
particular instance
29
Example for Class
Variables
• Suppose that all bicycles had the
same number of gears.
• Defining an instance variable to hold
the number of gears is inefficient:
each instance would have its own
copy of the variable, but the value
would be the same for every
instance.
• Define a class variable that contains
the number of gears. All instances
share this variable. If one object
changes the variable, it changes for
all other objects of that type.
30
Objects vs. Classes
• The difference between classes and
objects is confusing.
– In software, the term "object" is
sometimes used to refer to both classes
and instances.
• Class is not shaded. It represents a
blueprint of an object rather than an
object itself. A blueprint of a bicycle
is not a bicycle.
• An object is shaded, indicating that
the object exists and that you can use
it.
31
What is Inheritance?
A class inherits state and behavior from
its superclass.
• Inheritance provides a powerful and
natural mechanism for organizing
and structuring software programs.
• You know a lot about an object by
knowing its class. Even if you don't
know what a penny-farthing is, if I
told you it was a bicycle, you would
know that it had two wheels, handle
bars, and pedals.
• Object-oriented systems allow
classes to be defined in terms of
other classes.
32
Example for Inheritance
• Mountain bikes, racing bikes, and
tandems are all kinds of bicycles. In
object-oriented terminology, they are
all subclasses of the bicycle class.
Similarly, the bicycle class is the
superclass
33
How does Inheritance
work? (1)
• Each subclass inherits state (in the
form of variable declarations) and
methods from the superclass.
e.g. Mountain bikes, racing bikes, and
tandems share some states: cadence,
speed, and some behaviors: braking and
changing pedaling speed
• Subclasses are not limited to the
state and behaviors provided to them
by their superclass. Subclasses can
add variables and methods to the
ones they inherit from the
superclass.
e.g. Some mountain bikes have an extra
set of gears with a lower gear ratio.
34
How does Inheritance
work? (2)
• Subclasses can also override
inherited methods and provide
specialized implementations for
those methods.
e.g You had a mountain bike with an extra
set of gears, you would override the
"change gears" method so that the rider
could use those new gears.
• Not just one layer of inheritance: the
inheritance tree, or class hierarchy,
can be as deep as needed. -- The
farther down in the hierarchy a class
appears, the more specialized its
behavior.
35
How does Inheritance
work? (3)
• In JAVA, the Object class is at
the top of class hierarchy, and
each class is its descendant
(directly or indirectly). Object
provides behaviors that are
required of all objects running
in the Java Virtual Machine.
e.g. All classes inherit Object's
toString method, which returns a
string representation of the object.
36
Benefits of Inheritance
• Reuse the code in the superclass:
Subclasses provide specialized
behaviors from the basis of common
elements provided by the superclass.
• Programmers can implement
superclasses called abstract classes
that define "generic" behaviors. The
abstract superclass defines and may
partially implement the behavior, but
much of the class is undefined and
unimplemented. Other programmers
fill in the details with specialized
subclasses.
37
Why Abstract Class
• Abstract class: The methods can
not be specified at that moment.
e.g. TextMessage, VoiceMessage,
FaxMessage all have a method
called play(), how can you
implement play() in the superclass
Message?
Message
TextMessage
VoiceMessage
FaxMessage
38
What is an Interface? (1)
An interface is a contract in the
form of a collection of method
and constant declarations.
– An interface is probably most
analogous to a protocol (an agreed
on behavior).
– When a class implements an
interface, it promises to
implement all of the methods
declared in that interface
39
What is an Interface? (2)
• Interface defines a protocol of
behavior that can be implemented by
any class anywhere in the class
hierarchy.
– Capturing similarities among unrelated
classes without artificially forcing a
class relationship.
– Declaring methods that one or more
classes are expected to implement.
– Revealing an object's programming
interface without revealing its class.
40
Example of Interface
• An inventory program for bicycle
doesn't care what class of items it
manages as long as each item
provides certain information, such as
price and tracking number.
• The inventory program sets up a
protocol of communication. This
protocol comes in the form of a set
of constant and method definitions
contained within an interface.
• The inventory interface would
define, but not implement, methods
that set and get the retail price,
assign a tracking number, and so on.
41
Summary
•
•
•
•
•
•
Class is a prototype for objects
Objects are created from classes
An object's class is its type
How to create an object from a class
What constructors are
What class variables and methods
are
• What instance variables and methods
are
• How to find out what a class's
superclass is
• Interface is a protocol of behavior
42
Exercises
• Define classes based on the
following scenario: (make
reasonable assumption)
– Your use an bank card to do some
transaction from a bank machine.
– There are three type of
transaction: withdraw, deposit and
pay bill.
– You need input a 4 digits PIN
before you can do any transaction
– Bank machine will give you a
record after each transaction
43
First Cup of JAVA
44
Concise History of Java
• 1991: Group of Sun engineers design
a small portable computer language
for consumer devices
• 1992: First product delivered by the
group
• 1995: Hotjava – a WWW browser
written in Java with a built-in
interpreter of intermediate bytecodes
starts Java hype
• 1996: First official version of Java
is released
• 1999: Professional-looking
applications start to appear using the
new Swing GUI API
45
About Java
• Java technology is both a
programming language and a
platform
• The Java programming language is a
high-level language:
–
–
–
–
–
–
–
–
–
–
–
Simple
Architecture neutral
Object oriented
Portable
Distributed
High performance
Interpreted
Multithreaded
Robust
Dynamic
Secure
46
Overview of Java (1)
• Object-Orientation (OO)
– Programs describe interactions
between a collection of objects
which are designed to model
some aspect of the real world. For
example, an airline reservation
system would involve Airplanes,
Seats, Passengers, Tickets and so
on.
– Syntax is borrowed from C++,
while object model from
Smalltalk.
47
Overview of Java (2)
• Portability
– As in some version of Pascal, source
code is first compiled into platformindependent intermediate code –
bytecode. Unlike Pascal, this
intermediate compilation stage is
explicit
– Once in the form of bytecodes,
programs can be executed by platformdependent virtual machines.
– Java is often advertised as an
interpreter. In reality, Java source code
is always compiled into bytecodes first.
Bytecodes themselves are interpreted
by Java virtual machine (Java VM)
48
How Java works?
• The Java programming language is
unusual both compiled and
interpreted.
– With the compiler, first you translate a
program into an intermediate language
called Java bytecodes The platformindependent codes interpreted by the
interpreter on the Java platform. The
interpreter parses and runs each Java
bytecode instruction on the computer.
– Compilation happens just once;
interpretation occurs each time the
program is executed.
49
50
Why Java Platformindependent
• Java bytecodes help make "write
once, run anywhere" possible.
• You can compile your program into
bytecodes on any platform that has a
Java compiler. The bytecodes can
then be run on any implementation
of the Java VM.
• As long as a computer has a Java
VM, the same program written in the
Java programming language can run
on Windows 2000, a Solaris
workstation, or on an iMac.
51
52
Java Programming
Environment
• Official address for download:
http://java.sun.com/j2se/
• SDK: JavaTM 2 Platform,
Standard Edition v 1.2 or v1.3
• Document: JavaTM 2 Platform,
Standard Edition, v 1.2 or v1.3
Documentation
• Java 2 Runtime Environment:
browser plug-in (not necessary)
53
Java Directory Tree
\jdk
docs
bin
demo
include
lib
src
library documentation
in HTML format is here
the compiler and tools
look here for demo
files for native methods
library files
various subdirectories for
the library source
54
Before using Java
•
Update the PATH variable
e.g. In Autoexec.bat
SET PATH=d:\Jdk1.2.2\bin;
•
Set the CLASSPATH if
necessary
e.g. in Autoexec.bat
SET CLASSPATH=.; e:\myJava
55
A Simple Java Program
Everything in Java
lives in a class
Name of
class
Public class FirstSample
Entrance from
{
command line
public static void main(String[] args)
{
Command-line
Comments
argument
//Do nothing
System.out.println("Hello World!");
}
Semicolon at
}
the end of
every statement
A block
Call the method println of
of code
System.out object
Access modifier
56
Several Rules for Start
(1)
• Naming rules for classes,
methods, variables, etc.:
– Begin with a letter: ‘A’-’Z’, ‘a’’z’, ‘-’ or any Unicode character
that denotes a letter in a language
– Symbols like ‘+’ or ‘@’ can not
be used, nor can spaces
– All characters are case sensitive
– Following with any combination
of letters and digits
– Unlimited in length
– Can not use Java reserved words
57
Several Rules for Start
(2)
• File name must be exactly the
same with class name
• Must have a main method for
execution
• Braces (opening brace and close
brace) are used to delineate the
parts.
• Syntax for call method:
object.method(parameters)
58
Your First Cup of Java
(for Win32)
/*The HelloWorldApp class implements an
application that displays "Hello World!" to
the standard output.
*/
public class HelloWorldApp
{
public static void main(String[] args)
{
// Display "Hello World!"
System.out.println("Hello World!");
System.out.print("Hello World!");
System.out.println(“ I am learning
Java!");
}
}
59
Step by Step (1)
• Create a source file –
programmer understand
– You can use any text editor to
create and edit source files.
– Be Careful When You Type
Type all code, commands, and file
names exactly as shown. The Java
compiler and interpreter are casesensitive, so you must capitalize
consistently.
– Save as HelloWorldApp.java
60
Step by Step (2)
• Compile the source file into a
bytecode file - Java Virtual
Machine (Java VM) understand.
– Open MS-DOS Prompt
– Go to the directory that you save
your source file
– Enter:
Javac HelloWorldApp.java
– Get a class file
HelloWorldApp.class
61
Step by Step (3)
• Run the program contained in
the bytecode file - computer
understand.
– Enter
Java HelloWorldApp
– Have you got the greeting words?
62
Algorithm to Program
• Program = a Java class with a
“main” method that is the
translation of the algorithm.
• Givens, Results and
intermediates all get translated
to LOCAL VARIABLES
– They all must be declared and
given a type.
• Program template
63
Exercises
• Define turnEngineOff() and
decelerate() methods for Car
class
• Translate the Example 2 of
algorithm into Java code
64
Fundamental
Programming
Structures in Java
- Data
65
Data Type
• Eight primitive types
– Six number types (4 integer and
two floating-point type)
•
•
•
•
•
•
int
short
long
byte
bloat
double
– One character type: char
– One Boolean type: boolean
66
Integers (1)
• Numbers without fractional parts
• Negative values are allowed
• Long integer numbers have a suffix L.
Hexadecimal numbers have a prefix 0x
Type
Storage
requirement
int
4 bytes
short 2 bytes
Range
(inclusive)
-2,147,483,648 to
2,147,483,647
(just over 2 billion)
-32,768 to 32,767
long 8 bytes
-9,223,372,036,854,775,808L
to
9,223,372,036,854,775,807L
byte
-128 to 127
1 bytes
67
Integers (2)
• Under Java, the ranges of the
integer types do not depend on
the machine on which you will
run your Java code.
• Platform-independent integer
type brings a small performance
penalty (not the worst one).
68
Floating-Point Types
• Denote numbers with fractional parts.
• double means the numbers have twice the
precision of the float type
• Without a suffix F, a number is always
considered to be of type double.
Type
float
Storage
requirement
4 bytes
double 8 bytes
Range
approximately
±3.40282347E+38F
(6 ~ 7 significant decimal
digits)
approximately
±1.79769313486231570E
+308F
(15 significant decimal
69
digits)
The Character Type
• Denotes characters in the
Unicode encoding scheme.
– Designed to handle all characters
in all written languages -- 35,000
are in use
– \u prefix with four hexadecimal
digits indicates a Unicode value
– www.unicode.org
• Single quotes are used to denote
char constants.
– ‘H’ is a character
– “H” is a string
70
Special characters
Escape
Sequence
\b
\t
\n
\r
\”
\’
\\
Name
backspace
tab
linefeed
carriage
return
double quote
single quote
backslash
Unicode
Value
\u0008
\u0009
\u000a
\u000d
\u0022
\u0027
\u005c
71
Boolean Type
• Used for logic testing
• Only two values:
– TRUE or FALSE
– Not numbers
72
Variables (1)
• Java requests declaring the type
of a variable
• Declare a variable by placing
the type first, followed by the
name of the variable
e.g.
byte b; //for space-sensitive
//considerations
int anIntegerVariable;
long aLongVariable;
char ch;
73
Variables (2)
• Multiple declaration:
int i, j; //both are integers
recommend to declare one variable
per line
• You can put declaration
anywhere in your code, but you
can only declare a variable once
in any block in a method.
74
Expressions
• An expression is a series of
variables, operators, and method
calls (constructed according to the
syntax of the language) that
evaluates to a single value
• The job of an expression
– To perform the computation indicated
by the elements of the expression
– To return a value that is the result of the
computation
e.g.
System.out.println("The largest byte
value is " + largestByte);
75
Assignments and
Initializations
• After you declare a variable,
you should initialize it by means
of an assignment statement
• Never have un-initialized
variables
• Assignment:
– Previously declared variable on
the left
– an equal sign (=)
– some Java expression with an
appropriate value on the right
76
Example of Assignments
and Initializations
Correct assignments:
int foo; //this is a declaration
foo = 37; //this is an assignment
char yesChar;
yesChar = ‘Y’
int i = 10; //this is an
initialization
77
Conversions Between
Numeric Types (1)
• A binary operations on numeric
values of different types will be
treated in the following fashion:
– If any of the operands is of type
double, the other one will be
converted to a double;
– Otherwise, if any of the operands
is of type float, the other one will
be converted to a float;
– Otherwise, if any of the operands
is of type long, the other one will
be converted to a long.
78
Conversions Between
Numeric Types (2)
• Numeric conversion – loss of
information
– casts: give the target type in
parentheses, followed by the
variable name.
e.g. double x = 9.997;
int nx = (int) x;
Value of nx is 9.
– Round: use the Math.round
method.
e.g. double x = 9.997;
int nx = (int)Math.round(x);
Value of nx is 10.
Return type
is long
79
Conversions Between
Numeric Types (3)
• Certain assignment conversion
by assigning the value of a
variable of one type to another
without an explicit cast:
byte short int long
double
float
80
Constants
• Use keyword final to denote a
constant
• final indicates that you can only
assign to the variable once
e.g.
public class UsesConstants
{
public static void main(String args)
{
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println(“Paper size in centimeter: ”
+ paperWidth * CM_PER_INCH + “ by ”
+ paperHeight * CM_PER_INCH );
}
}
81
Class Constants
• Use static final for class constants
• Appear outside method
e.g.
public class UserConstants2
{
public static final double G = 9.81;
// gravitation in meters/second squared
public static void main(String[] args)
{
System.out.println(G
+ “meters per second squared”);
}
}
82
Arithmetic Operators (1)
• Arithmetic operators + - * / are used
in Java for addition, subtraction,
multiplication and division
• The / operator denotes integer
division if both arguments are
integers, and floating-point division
otherwise.
• % denoted integer remainder.
e.g.
15 / 6 is 2
15 % 6 is 3
11.0 / 4 is 2.75
83
Arithmetic Operators (2)
• You can use arithmetic
operators in your variable
initialization
e.g.
int n = 5;
int a = 2 * n; // a is 10
• Shortcut for using binary
arithmetic operators
e.g.
x += 4; equal to x = x + 4
y %= 3; equal to y = y % 3
84
Exponentiation
• Java has no operator for raising
a quantity to a power
• Use Math.pow method.
e.g.
double y = Math.pow(x, n);
y is set to x raised to the power n,
which is xⁿ
The return type of Math.pow is
double.
85
Increment and
Decrement Operators (1)
• Increment operator: ++
– adds 1 to the current value of the
variable
e.g.
int n = 12;
n++;
Value of n is 13
• Decrement operator: -– subtracts 1 to the current value of the
variable
e.g.
int m = 7;
m--;
Value of m is 6.
86
Increment and
Decrement Operators (2)
• Not be applied to number.
e.g 4++ is error
• Two forms make difference in
expressions – recommend against
using ++ and -- inside other
expressions:
– “postfix”: evaluate to the old value of
the variable
– “prefix”: does addition or subtraction
first
e.g
int m = 7;
int n = 7;
int a = 2 * ++m; // a is 16, m is 8
int b = 2 * n++; //b is 14, n is 8
87
Rational and Boolean
Operators
• Results of rational and Boolean
operators are of type boolean
– Test for equality: ==
– Test for inequality: !=
– Less than: <
– Greater than: >
– Less than or equal: <=
– Greater than or equal: >=
– Logic and: &&
– Logic or: ||
e.g. (3 != 7) is true
88
Bitwise Operators (1)
• Work with any of the integer types
• Work directly with the bits that make
up the integers – use masking
techniques to get a individual bits in
a number
– “and”: &
– “or”: |
– “xor”: ^
– “not”: ~
e.g. if foo is an integer,
int fouthBitFromRight = (foo & 8) / 8
gives the fourth bit from the right in the
binary representation of foo is one, and
a zero if not
89
Bitwise Operators (2)
• >> and << operators shift a bit
pattern to the right or left
• >> operator fills the top bits
with the sign bit
• >>> operator fills the top bits
with zero
• There is no <<< operator
90
Parentheses and
Operator Hierarchy
• Use parentheses to indicate the
order in which you want
operations to be carried out
• If no parentheses are used,
operations are performed in the
hierarchical order indicated
• Operators on the same level are
processed from left to right,
except for those that are right
associative
91
Operator Precedence
Operators
Associativity
[] . ()(method call)
left to right
! ~ ++ -- + (unary) – (unary) ()(cast) new
right to left
* / %
left to right
+ -
left to right
<< >> >>>
left to right
< <= > >= instanceof
left to right
== !=
left to right
&
left to right
^
left to right
|
left to right
&&
left to right
||
left to right
?:
left to right
= += -= *= /= %= &= |= ^= <<= >>= >>>= right to left
92
Strings
• Denotes a sequences of Unicode
characters
• Java has not a built-in string
type
• Use methods in String class,
each quoted string is an instance
of the String class
e.g.
String e = “”; //and empty string
String greeting = “Hello”;
93
Concatenation of Strings
• Java allows to use the + sign to
join(concatenate) two strings
together
e.g.
String expletive = “Expletive”;
String PG13 = “deleted”;
String message = expletive + PG13;
• The + sign join two strings together
in the order received, exactly as they
are given
• When you concatenate a string with
a value that is not a string, the value
is converted to a string
e.g.
String fating = “PG” + 13 is “PG13”
94
Substrings
• Exact a substring from a larger
string with the substring method
of the String class.
e.g
String greeting = “Hello”;
String s = greeting.substring(0, 4);
s is “Hell”
• The first character in a string
has position 0.
• The length of string
s.substring(a, b) is always b - a
95
String Editing
• To find out the length of a string, use
length():
e.g.
String greeting = “Hello”;
int n = greeting.length();
//is 5
• To get at individual characters of a
string: s.charAt(n), n is between 0
and s.length() - 1
e.g.
String greeting = “Hello”;
char ch = greeting.charAt(1); // is ‘e’
• No direct way to change a character
in strings – use substring() and
concatenation to do that
96
Testing Strings for
Equality (1)
• To test if or not two strings are
equal: s.equals(t). -- Return true if
the strings and t are equal, false
otherwise
e.g.
“Hello”.equals(command);
• To test if two strings are identical
except for the upper/lower case letter
distinction: s.equalsIgnoreCase(t)
e.g.
“Hello”.equalsIgnoreCase(“hello”); is
true
97
Testing Strings for
Equality (2)
• Do not use == to test if strings are
equal, it only determines whether or
not the strings are stored in the same
location
e.g.
String greeting = “Hello”;
if (greeting == “Hello”) . . .
//probably true
if (greeting.substring(0,4) == “Hell”) .
//probably false
• Never use == to compare strings
• Go to the Java document to find API
of String
98
Input from a Command
Line Parameter
public class Test
{
public static void main(String[] args)
{
double x = args[0];
double y = args[1];
System.out.println(“I got ” + x
+“ and ” + y
+ “ from command line);
}
}
C:\>java Test 3.02
99
Formatting Output (1)
• System.out.print(x) print x with the
maximum number of non-zero digits
for that type
e.g.
x = 10000.0 / 3.0;
System.out.print(x);
prints 3333.3333333333335
• To arrange your output neatly:
NumberFormat class in java.txt
package offers formatters for
numbers, currency values and
percentage values
e.g. for United States locale should print
3,333.333
$3,333.33
333,333%
100
Formatting Output (2)
• To obtain a formatter for the default
locale:
– NumberFormat.getNumberInstance()
– NumberFormat.getCurrencyInstance()
– NumberFormat.getPercentInstance()
• Customize output
– Set minimum or maximum number of
integer digits:
setMinimumIntegerDigits()
setMaximumIntegerDigits()
– Set minimum or maximum number of
fractional digits:
setMinimumFractionDigits() default 0
setMaximumFractionDigits()
101
Example of formatting
Output
1.double x = 1000.0 / 3.0;
NumberFormat nf =
NumberFormat.getNumberInstance();
String fx = nf.format(x);
//the string is “3,333.33”
2. double x = 1000.0 / 3.0;
NumberFormat nf =
NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(4);
nf.setMinimumIntegerDigits(6);
String fx = nf.format(x);
//the string is “003,333.3333”
102
Formatter for different
locales
• Object Locale.GERMAN is the local
for German number formatting rules
e.g.
double x = 10000.0 / 3.0;
NumberFormat nf =
NumberFormat.getNumberInstance(
Locale.GERMAN);
Sysetm.out.println(nf.format(x));
NumberForamt cf =
NumberFormat.getCurrencyInstance(
Locale.GERMAN);
Sysetm.out.println(cf.format(x));
Prints:
3.333,333
3.333,33 DM
103
Create your own format
e.g To define a format that shows
number with six digits after the
decimal point, but no thousands
separator
DecimalFormat df = new
decimalFormat(“0.######”);
System.out.println(df.format(x));
104
Formatting characters
for DecimalFormat class
Symbol
0
#
.
,
;
%
Any other
symbols
Meaning
A digit
A digit; don’t show if it is a
leading or trailing zero
Location of decimal separator
Location of grouping separator
Separates formats for positive
and negative numbers
Negative prefix
Divide by 100 and show as
percentage
Include symbol in output string
105
Excises
1.
2.
3.
Write a program that tests whether a
floating point number is zero. (Hint: You
shouldn't generally use the equality
operator == with floating point numbers,
since floating point numbers by nature
are hard to match exactly. Instead, test
whether the number is close to zero.)
Change the code for Algorithm 1 and 2
to get parameter from command line.
Write a program that calculates the
number of US dollars equivalent to a
given number of French francs. Assume
an exchange rate of 6.85062 francs per
dollar. If you want to control the format
of the numbers your program displays,
you can use the DecimalFormat class,
which is discussed in Customizing
Formats
106
4. Write a program that uses the bits in a
single integer to represent the true/false
data shown in the following figure:
Include in the program a variable named
status, and have the program print the
meaning of status. For example, if
status is 1 (only bit 0 is set) the program
should print something like this: Ready
to receive requests
a. Show your code.
b. What is the output when status is 8?
c. What is the output when status is 7?
107
Fundamental
Programming
Structures in Java
- Control
108
Statements (1)
• Statements are roughly equivalent to
sentences in natural languages. It
forms a complete unit of execution.
• The following types of expressions
can be made into a statement by
terminating the expression with a
semicolon (;):
– Assignment expressions
– Any use of ++ or -– Method calls
– Object creation expressions
e.g
aValue = 8933.234;
aValue++;
System.out.println(aValue);
Integer integerObject = new Integer(4);
109
Statements (2)
• Two other kinds of statements.
– declaration statement declares a
variable.
e.g.
double aValue = 8933.234;
– control flow statement regulates
the order in which statements get
executed.
110
Know more about blocks
(1)
• Block is any number of simple Java
statements that are surrounded by a
pair of braces
• Blocks define the scope of variables
• Blocks can be nested inside another
e.g.
public static void main(String[] args)
{
int n;
{
int k; // k local to block and
//defines only until the
//end of the block
}
}
111
Know more about blocks
(2)
• It is not possible to declare
identically named variables in two
nested blocks
e.g.
public static void main(String[] args)
{
int n;
{
int k;
int n; // error – can’t redefine n
// in inner block
}
}
112
Conditional Statements
(1) – if Statement
Syntax:
if (condition) statement;
if (condition) { block }
e.g.
if (yourSales >= target)
{
performance = “Satisfactory”;
bonus = 100;
}
NO
youSales >= target
YES
performance = “Satisfactory”
bonus = 100
113
Conditional Statements
(2) – if-else Statement
Syntax:
if (condition) statement1 else
statement2;
if (condition) {block1} else {block2}
e.g.
if (yourSales >= target)
{
performance = “Satisfactory”;
bonus = 100;
}
else
{
performance = “Unsatisfactory”;
bonus = 0;
}
114
• Use else groups with the closest if
e.g.if (yourSales >= 2 * target)
{
performance = “Excellent”;
bonus = 1000;
}
else if (yourSales >= 1.5 * target)
{
performance = “Fine”;
bonus = 500;
}
else if (yourSales >= target)
{
performance = “Satisfactory”;
bonus = 100;
}
else
{
System.out.println(“You are fired!”);
115
}
? Operator
• Java supports the ternary ? operator
• The expression
condition ? e1 : e2 evaluates to e1 if
the condition is true, to e2 otherwise.
e.g.
(x < y) ? x:y give the smaller of
x and y
int x = 1;
int y = 3;
int z = (x < y) ? x:y; // z is 1
116
Multiple Selections
- switch Statement
• Conditionally perform statements
based on an integer or char
expression
• Select only against a char or against
all the integer types but long.
• Can not use a range of values
• Each break statement terminates the
enclosing switch statement, and the
flow of control continues with the
first statement following the switch
block.
• Use the default statement at the end
of the switch to handle all values that
aren't explicitly handled by one of
the case statements
117
public class SwitchDemo
{ public static void main(String[] args)
{ int day = 3;
switch (month)
{
case 1: System.out.println(“Monday");
break;
case 2:System.out.println(“Tuesday");
break;
case 3:
System.out.println(“Wednesday");
break;
case 4:
System.out.println(“Thursday");
break;
……
case 7: System.out.println("June");
break;
}
}
118
}
public class SwitchDemo2
{ public static void main(String[] args)
{
int month = 2;
int year = 2000;
int numDays = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: numDays = 31; break;
case 4:
case 6:
case 9:
case 11: numDays = 30;
break;
case 2: if ( ((year % 4 == 0) && !(year % 100
== 0)) || (year % 400 == 0) )
numDays = 29;
else numDays = 28; break;
}
System.out.println("Number of Days = " + numDays);
}
119
}
int month = 8;
...
switch (month)
{ case 1: System.out.println("January");
break;
case 2: System.out.println("February");
break;
case 3: System.out.println("March");
break;
……
case 11: System.out.println("November");
break;
case 12: System.out.println("December");
break;
default:
System.out.println("Hey, that's not
a valid month!");
break;
}
120
Breaks
• break statement is used to
resume program execution at
the statement immediately
following the current statement.
e.g.
while (years <= 100)
{
balance = ( balance + payment )
* ( 1 + interest );
if ( balance > goal ) break;
years++;
}
121
Labeled Breaks
• If followed by a label, the
program resumes execution at
the labeled statement.
e.g.
next_client:
……
while (years <= 100)
{
balance = ( balance +
payment )
* ( 1 + interest );
if ( balance > goal ) break
next_client;
years++;
}
122
Indeterminate Loops (1)
- while loop
• Syntax:
while (condition) { block }
• The while loop only executes the
body of the loop while a condition is
true
NO
condition
YES
Statemets
123
public class WhileDemo
{
public static void main(String[] args)
{
String copyFromMe =
"Copy this string until you "
+ "encounter the letter 'g'.";
StringBuffer copyToMe =
new StringBuffer();
int i = 0;
char c = copyFromMe.charAt(i);
while (c != 'g')
{
copyToMe.append(c);
c = copyFromMe.charAt(++i);
}
System.out.println(copyToMe);
}
}
124
Indeterminate Loops (2)
- do-while loop
• Syntax:
do { block } while (condition)
• Instead of evaluating the expression
at the top of the loop, do-while
evaluates the expression at the
bottom. The statements are executed
at least once
Statemets
condition
YES
NO
125
public class DoWhileDemo
{
public static void main(String[] args)
{
String copyFromMe =
"Copy this string until you "
+ "encounter the letter 'g'.";
StringBuffer copyToMe =
new StringBuffer();
int i = 0;
char c = copyFromMe.charAt(i);
do
{
copyToMe.append(c);
c = copyFromMe.charAt(++i);
} while (c != 'g');
System.out.println(copyToMe);
}
}
126
Determinate Loops
– for loop
• Syntax:
for (initialization; termination;
increment )
{block}
• Equal to
{ initialization;
while (termination)
{
block;
increment;
}
}
127
/*Adds the numbers from 1 to 10 and displays
the result
*/
public class ForDemo
{
public static void main(String[] args)
{
int sum = 0;
for (int current = 1; current <= 10;
current++)
{
sum += current;
}
System.out.println("Sum = " + sum);
}
}
128
continue Statement
• Skip the current iteration of a for,
while , or do-while loop
• The unlabeled form skips to the end
of the innermost loop's body and
evaluates the boolean expression that
controls the loop, basically skipping
the remainder of this iteration of the
loop.
• The labeled form skips the current
iteration of an outer loop marked
with the given label.
129
public class ContinueDemo
{
public static void main(String[] args)
{
StringBuffer searchMe =
new StringBuffer( "peter piper picked
a peck of pickled peppers");
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++)
{ //interested only in p's
if (searchMe.charAt(i) != 'p')
continue; //process p's
numPs++;
searchMe.setCharAt(i, 'P');
}
System.out.println("Found " + numPs
+ " p's in the string.");
System.out.println(searchMe);
}
}
130
public class ContinueWithLabelDemo
{ public static void main(String[] args)
{
String searchMe =
"Look for a substring in me";
String substring = "sub";
boolean foundIt = false;
int max = searchMe.length()
- substring.length();
test: for (int i = 0; i <= max; i++)
{
int n = substring.length();
int j = i;
int k = 0;
while (n-- != 0)
{
if (searchMe.charAt(j++) !=
substring.charAt(k++))
{ continue test; }
}
foundIt = true;
break test;
}
System.out.println(foundIt ? "Found it" :
"Didn't find it");
}
}
131
return Statement
• Exit from the current method.
• The flow of control returns to the
statement that follows the original
method call.
• Two forms
– Returns a value: put the value (or an
expression that calculates the value)
after the return keyword. The data type
of the value returned by return must
match the type of the method's declared
return value.
e.g. return ++count
– Doesn't return a value. When a method
is declared void,
e.g. return;
132
Excises
1. What's wrong with the following
code snippet:
if (i = 1)
{
/*do something */
}
2. Consider the following code snippet.
if (aNumber >= 0)
if (aNumber == 0)
System.out.println("first string");
else System.out.println("second string");
System.out.println("third string");
133
– What output do you think the code will
produce if aNumber is 3?
– Write a test program containing the
code snippet; make aNumber 3. What is
the output of the program? Is it what
you predicted? Explain why the output
is what it is. In other words, what is the
control flow for the code snippet?
– Using only spaces and line breaks,
reformat the code snippet to make the
control flow easier to understand.
– Use braces { and } to further clarify the
code and reduce the possibility of errors
by future maintainers of the code.
134