Download Lecture

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Java Simple Arithmetic
Last Week
Lecture 2
1
CP4044 – Lecture 2
2
CP4044 – Lecture 2
Hello World Program
Platform
Specific
Platform Independent
Programmer types the
program into the computer
in the high level Java language.
/* The "hello world" program in Java.
Date written 2/10/7
*/
The Java program is translated
into a form that is “understood”
by the computer.
1
2
Text
Editor
Source Code
Compiler
ClassName.java
notepad, eclipse,
bluej, kate, etc
3
CP4044 – Lecture 2
3
Hardware and
Operating
System
Programmer
public class MyProg
{
static public void main(String args[])
{
System.out.println("Hello world");
System.out.println("Goodbye");
}
}
The program executes
Byte Code
Interpreter
ClassName.class
javac
java, appletviewer,
netscape etc.
4
CP4044 – Lecture 2
The int primitive data type
• Primitive data type
– Not a class – no methods
– Java is not a fully OO language
This week
• Stores a single integer value
– A whole number
• Platform independent
– 32 bits on all architectures and O/S
• Other integer types are available
– long – 64 bits
– byte – 8 bits
CP4044 – Lecture 2
5
CP4044 – Lecture 2
6
Kevan Buckley, Peter Burden, CP4044, 2004
1
The int primitive data type
Sum of two numbers
public class Sum1 {
• All variables must be declared before use
public static void main(String[] args) {
int x=4, y;
int x = 3;
y=7;
int y;
Variable
declaration
Initialisation
before use
y = 4;
• Integer literals
System.out.println("Sum of " +
– Leading zeros indicate octal
Output to
stdio
x +
" and " +
09 is invalid
String
concatenation
y +
– 0x indicates hexadecimal
" is " +
0xff equals 255
Type-casting/
conversion
(x + y));
– Trailing L indicates a long value
}
9987689756985L is a long value
Operator
precedence
}
Sum of 3 and 4 is 7
7
CP4044 – Lecture 2
8
CP4044 – Lecture 2
Sum of two numbers?
Sum of two numbers?
public class Sum2 {
public class Sum3 {
public static void main(String[] args) {
public static void main(String[] args) {
int x = 3, y = 4;
int x = 3, y = 4;
System.out.print("Sum of ");
System.out.println("Sum of " + x + " and " + y +
System.out.print(x);
" is " + x + y);
System.out.print(" and ");
}
System.out.print(y);
}
System.out.print(" is ");
System.out.println(x + y);
}
}
Sum of 3 and 4 is 7
What is happening
here?
Sum of 3 and 4 is 34
9
CP4044 – Lecture 2
Primitive data types
Primitive data types
• boolean
• byte
– Value is either true or false
– Holds an 8 bit integer
– Values range from –128 to 127
• true and false keywords are used for literals
– Occupies one bit of memory
• short
• char
• int
– Holds a 32 bit integer
– Values range from –2147483648 to 2147483647
• long
'a' - letter a
'\n' – escape code for new line character
'\u12cf' - hexadecimal
'\066' – octal – maximum value is '\377' i.e. '\u00ff'
CP4044 – Lecture 2
java.math.BigDecimal
provides arbitrary
precision arithmetic
at a price in
performance
– Holds a 16 bit integer
– Values range from –32768 to 32767
– Stores a single character
– Uses unicode, not ASCII
– Occupies 16 bits
– Literals enclosed in single quotes
•
•
•
•
10
CP4044 – Lecture 2
– Holds a 64 bit integer
– Values range from –9223372036854775808 to
9223372036854775807
11
CP4044 – Lecture 2
12
Kevan Buckley, Peter Burden, CP4044, 2004
2
Primitive data types
Operators
• See Workshop notes for the full list of Java
operators
• float
– Holds a 32 bit floating points number
– Values range from ±1.4E-45 to ±3.4028235E+38
– literal required to end in 'f'.
• Some operators are overloaded
– i.e. behavior depends on the context
• float pi = 3.14f;
• Example +
• double
25 + 6
“25” + “6”
– Holds a 64 bit floating point number
– Values range from ±4.9E-324 to
±1.7976931348623157E+308
Arithmetic addition
String concatenation
produces 31
produces “256”
• Example /
2.5 / 2.0
7/3
Floating point division produces 1.25
Integer division
produces 2
Floating point numbers conform to IEEE 754-1985
13
CP4044 – Lecture 2
14
CP4044 – Lecture 2
Arithmetic Example
public class Arithex1 {
public static void main(String[] args) {
double x = 23.4, y = -41.7;
Formatting Output
Addition
import java.text.*;
Import
packages
public class Arithex2 {
Number
Format
Multiplication
int i = 4, j = 7;
(Integer)
division
System.out.println("x + y = " + (x + y));
Modulus
NumberFormat layout =
System.out.println("x * i = " + (x * i));
Rounding
errors
layout.setMaximumFractionDigits(4);
System.out.println("j / i = " + (j / i));
public static void main(String[] args) {
NumberFormat.getNumberInstance();
double x = 23.4, y = 41.7;
System.out.println("x % i = " + (x % i));
System.out.println("x/y = " + (x / y));
}
String outstr = layout.format(x / y);
}
x + y = -18.300000000000004
System.out.println("x/y = " + outstr);
x * i = 93.6
}
j / i = 1
CP4044 – Lecture 2
x/y = 0.5611510791366906
}
x % i = 3.3999999999999986
15
CP4044 – Lecture 2
x/y = 0.5612
Floating Point Arithmetic Errors
public class Divzer1 {
public static void main(String[] args[]) {
double x, y, quotient;
x = 1;
y = 0;
Factory
method
Define format:
fraction &
integer parts
Build output
string
See also
Decimal
Format &
Font Metrics
16
Arithmetic Errors
Division by
zero
public class Divzer2 {
public static void main(String[] args) {
IEEE-754
int x, y, quotient;
Infinity
x = 1;
NaN
y = 0;
quotient = x / y;
quotient = x / y;
Division by
zero
Exceptions
Integers and
simple!
Code
defensively
System.out.println("Quotient = " + quotient);
System.out.println("Quotient = " + quotient);
}
}
}
}
Quotient = Infinity
Exception in thread "main" java.lang.ArithmeticException:
/ by zero
at Divzer2.main(Divzer2.java:6)
CP4044 – Lecture 2
17
CP4044 – Lecture 2
18
Kevan Buckley, Peter Burden, CP4044, 2004
3
Identifying Problems
public class Divzer3 {
public static void main(String[] args) {
double x, y, quotient;
x = 1;
y = 0;
quotient = x / y;
if (quotient == Double.POSITIVE_INFINITY)
System.out.println("Problem");
else
Trapping Exceptions
public class Divzer4 {
Conditional
statement
public static void main(String[] args) {
Equality vs.
assignment
int x, y, quotient;
Wrapper
classes
y = 0;
x = 9;
Exception
handlers
Exception
classes
try {
quotient = x / y;
POSITIVE_
INFINITY
Throwing
exceptions
} catch (ArithmeticException ae) {
Finding out
more detail
System.out.println("Problem");
Java is not
fully OO
return;
}
System.out.println("Quotient = " + quotient);
System.out.println("Quotient = " + quotient);
}
}
}
}
19
CP4044 – Lecture 2
20
CP4044 – Lecture 2
Don't Rely on Exception Handlers
public class Intof {
public static void main(String[] args) {
int x, y, product;
x = 1000000;
y = 2000000;
try {
product = x * y;
} catch (ArithmeticException ae) {
Packages
Overflow
• Java includes many Standard Classes
Integers are
simple
– E.g. NumberFormat
Code to
defend
against
problems, not
react to them.
System.out.println("Problem");
return;
System.out.println("Product = " + product);
}
}
Product = -1454759936
– E.g. NumberFormat is in the java.text package
• The names of packages have a hierarchical
structure (similar to DNS names)
• Most of the Java classes you use are in the
java.lang package
}
CP4044 – Lecture 2
• Classes are organized into Packages
• Use the Java Documentation to find out what
package a class is in
21
Packages
Example from the Workshop
• When you use a Java standard class, you must
tell the compiler which package it is in. There
are three ways to do this:
java.text.NumberFormat
import java.text.NumberFormat;
import java.text.*;
import java.text.*;
public class Arithex2
{
static public void main(String args[])
{
NumberFormat layout = NumberFormat.getNumberInstance();
layout.setMaximumFractionDigits(4);
double x = 23.4, y = 41.7;
System.out.println("x/y = " + (x/y));
• The java.lang package is imported by default
• Classes you define are stored in the default
package
CP4044 – Lecture 2
22
CP4044 – Lecture 2
String outstr = layout.format(x/y);
System.out.println("x/y = " + outstr);
}
}
23
CP4044 – Lecture 2
24
Kevan Buckley, Peter Burden, CP4044, 2004
4