Java Methods 3rd AP edition

Java Methods
Object-Oriented Programming
and Data Structures
3rd AP edition
Maria Litvin ● Gary Litvin
int chapter = 5;
Data Types, Variables,
and Arithmetic
Copyright © 2015 by Maria Litvin, Gary Litvin, and Skylight Publishing. All rights reserved.
Objectives:
• Discuss primitive data types
• Learn how to declare fields and local
variables
• Learn about arithmetic operators, compound
assignment operators, and increment /
decrement operators
• Discuss common mistakes in arithmetic
5-2
Variables
• A variable is a “named container”
•
that holds a value.
q = 100 - q;
5
count
means:



1. Read the current value of q
2. Subtract it from 100
3. Move the result back into q
mov ax,q
mov bx,100
sub bx,ax
mov q,bx
5-3
Variables (cont’d)
• Variables can be of different data types: int,
char, double, boolean, etc.
• Variables can hold objects; then the type is
the class of the object.
• The programmer gives names to variables.
• Names of variables usually start with a
lowercase letter.
5-4
Variables (cont’d)
• A variable must be declared before it can
be used:
int
Type
count;
double
x, y;
JButton
go;
Name(s)
Balloon b;
String firstName;
5-5
Variables (cont’d)
• The assignment operator = sets the
variable’s value:
count = 5;
x = 0;
go = new JButton("Go");
firstName = args[0];
5-6
Variables (cont’d)
• A variable can be initialized in its
declaration:
int count = 5;
JButton go = new JButton("Go");
String firstName = args[0];
5-7
Variables: Scope
• Each variable has a scope —
the area in the source code
where it is “visible.”
• If you use a variable outside its
scope, the compiler reports a
syntax error.
• Variables can have the same
name when their scopes do not
overlap.
{
int k = ...;
...
}
for (int k = ...)
{
...
}
5-8
Fields
• Fields are declared outside all
constructors and methods.
• Fields are usually grouped together,
either at the top or at the bottom of the
class.
• The scope of a field is the whole class.
5-9
Fields (cont’d)
Scope
public class SomeClass
{
Fields
}
Constructors
and methods
Or:
Scope
public class SomeClass
{
Constructors
and methods
Fields
}
5-10
Local Variables
• Local variables are declared inside a
constructor or a method.
• Local variables lose their values and are
destroyed once the constructor or the method
is exited.
• The scope of a local variable is from its
declaration down to the closing brace of the
block in which it is declared.
5-11
Local Variables (cont’d)
public class SomeClass
{
...
public SomeType SomeMethod (...)
{
Local variable declared
{
Scope
Local variable declared
}
}
...
}
5-12
Variables (cont’d)
• Use local variables whenever appropriate;
never use fields where local variables should
be used.
• Give prominent names to fields, so that they
are different from local variables.
• Use the same name for local variables that
are used in similar ways in different methods
(for example, x, y for coordinates, count for a
counter, i, j, k for indices and loop control
variables, etc.).
5-13
Variables (cont’d)
• Common mistakes:
public void someMethod (...)
{
int x = 0;
...
int x = 5; // should be: x = 5;
...
Variable declared twice
within the same scope —
syntax error
5-14
Variables (cont’d)
• Common mistakes:
private double radius;
...
public Circle (...)
// constructor
{
double radius = 5;
...
Declares a local variable
radius; the value of the field
radius remains 0.0
5-15
Primitive Data Types
•
•
•
•
int
double
char
boolean
•
•
•
•
byte
short
long
float
Used in
Java Methods
5-16
Strings
• String is not a primitive data type
• Strings work like any other objects, with two
exceptions:


strings in double quotes are recognized as literal
constants
+ and += concatenate strings (or a string and a
number or an object, which is converted into a
string)
"Catch " + 22
"Catch 22"
5-17
Literal Constants
new line
tab
'A', '+', '\n', '\t'
char
-99, 2010, 0
int
0.75, -12.3, 8., .5
double
“coin.gif", "1776", "y", "\n"
String
5-18
Symbolic Constants
• Symbolic constants are initialized final
variables:
private final int sideLength = 8;
private static final int BUFFER_SIZE = 1024;
public static final int PIXELS_PER_INCH = 6;
5-19
Why Symbolic Constants?
• Easy to change the value throughout the
program, if necessary
• Easy to change into a variable
• More readable, self-documenting code
• Additional data type checking by the
compiler
5-20
Arithmetic
• Operators: +, -, /, * , %
• The precedence of operators and
parentheses is the same as in algebra.
• m % n means the remainder when m is
divided by n (for example, 17 % 5 is 2;
2 % 8 is 2).
% has the same rank as / and *.
•
• Same-rank binary operators are performed in
order from left to right.
5-21
Arithmetic (cont’d)
• The type of the result is determined by the
types of the operands, not their values; this
rule applies to all intermediate results in
expressions.
• If one operand is an int and another is a
double, the result is a double; if both
operands are ints, the result is an int.
5-22
Arithmetic (cont’d)
• Caution: if a and b are ints, then a / b is
truncated to an int…
17 / 5 gives 3
3 / 4 gives 0
• …even if you assign the result to a double:
double ratio = 2 / 3;
The double type of
the result doesn’t
help: ratio still gets
the value 0.0.
5-23
Arithmetic (cont’d)
• To get the correct double result, use double
constants or the cast operator:
double ratio = 2.0 / 3;
double ratio = 2 / 3.0;
int m = ..., n = ...;
double ratio = (double) m / (double) n;
double ratio = (double) m / n;
Casts
double r2 = n / 2.0;
5-24
Arithmetic (cont’d)
• A cast to int can be useful:
Returns a
double
int ptsOnDie = (int)(Math.random() * 6) + 1;
int miles = (int)(km * 1.61 + 0.5);
Converts kilometers to
miles, rounded to the
nearest integer
5-25
Arithmetic (cont’d)
• Caution: the range for ints is from
-231 to 231-1 (about -2·109 to 2·109)
• Overflow is not detected by the Java
compiler or interpreter:
n
n
n
n
n
n
n
=
=
=
=
=
=
=
8
9
10
11
12
13
14
10^n
10^n
10^n
10^n
10^n
10^n
10^n
=
=
=
=
=
=
=
100000000
1000000000
1410065408
1215752192
-727379968
1316134912
276447232
n!
n!
n!
n!
n!
n!
n!
=
40320
=
362880
=
3628800
=
39916800
= 479001600
= 1932053504
= 1278945280
5-26
Arithmetic (cont’d)
• Compound assignment
operators:
• Increment and
decrement operators:
a = a + b;
a = a - b;
a += b;
a -= b;
a = a * b;
a *= b;
a = a / b;
a /= b;
a = a % b;
a %= b;
a = a + 1;
a = a - 1;
a++;
a--;
Do not use these in
larger expressions
5-27
From Numbers to Strings
• The easiest way to convert x into a string is to
concatenate x with an empty string:
String s = x + "";
Empty string
'A'
123
-1
"A"
"123"
"-1"
.1
3.14
Math.PI
"0.1"
"3.14"
"3.141592653589793"
• The same rules apply to System.out.print(x)
5-28
From Objects to Strings
• The toString method is called:
public class Fraction
{
private int num, denom;
...
public String toString ()
{
return num + "/" + denom;
}
}
Fraction f = new Fraction (2, 3);
System.out. println (f) ;
Output: 2/3
f.toString() is called
automatically
5-29
The Math class
• Has methods for common math functions:








Math.abs(x)  |x|, absolute value of x
Math.round(x)  x rounded to an integer
Math.pow(x, e)  xe
Math.sqrt(x)  square root of x
Math.max(x, y)  the greater of x, y
Math.min(x, y)  the smaller of x, y
Math.random()  a random number 0  x < 1
Other math functions: trig, log, etc.
5-30
Review:
• What is a variable?
• What is the type of a variable that holds an
object?
• What is meant by the scope of a variable?
• What is the scope of a field?
• What is the scope of a local variable?
5-31
Review (cont’d):
• Is it OK to give the same name to variables in
different methods?
• Is it OK to give the same name to a field and
to a local variable of the same class?
• What is the range for ints?
• When is a cast to double used?
5-32
Review (cont’d):
• Given
double dF = 68.0;
double dC = 5 / 9 * (dF - 32);
what is the value of dC?
• When is a cast to int used?
• Should compound assignment operators
be avoided?
• Name a few methods of Math.
5-33