CSE 135:
Numerical Data
Week 3
By
Javed Siddique
Objectives
After this week you should be understand
Numeric data types
Arithmetic operators and expressions
Standard classes
Math
GregorianCalendar
DecimalFormat
Input and output classes
Primitive Data Types
Although the primary type of data in OOP is
objects, there is another important data type.
These are called primitive types.
In contrast, objects are reference data types.
There is no class for primitive data.
Data in an object must be either another object,
or primitive data.
There are three main primitive types:
Numeric This week.
Character
Logic
Declaration
As with objects, primitive data values are
accessed using identifiers.
The declaration specifies the type of the identifier
The type of an object is given by its class
Primitive data have one of the following types:
Numeric: by te, s hort, int, long , flo at,
doubl e
Character: ch ar
Logic: bo olean
Unlike objects, primitive data items are created
upon declaration
No need to call new in order to allocate the space.
Variables
Data items are also called variables.
A variable has three properties:
A memory location to store the value,
The type of data stored in the memory location, and
The name used to refer to the memory location.
Sample declaration:
in t x;
When the declaration is made, memory space is
allocated to store integer values; x is a reference
for this space.
It is a “variable” since its value can be changed
during program execution. Similarly, object
identifiers are also variables.
Assignment Statements
We assign a value to a variable using an
assignment statement.
The syntax is
<variable> = <expression> ;
We will discuss expressions later. For now, they
can be numeric values or numeric variables.
Examples:
in t i,j ;
i = 5;
j = i;
This assignment is different than the assignment
to object identifiers.
Primitive Data Declaration and Assignments
int fir stNumb er, s econdN umbe r;
fir stNu mber = 234 ;
sec ondN umber = 87; A. Variables are
allocated in memory.
A firstNumber 234
int firs tNumbe r, se condN umbe r;
secondNumber 87
fir stNu mber = 234 ;
sec ondN umber = 87; B
B. Values are assigned
to variables.
Code State of Memory
Assigning Numerical Data
int num ber;
num ber = 237 ;
num ber = 35; number 35
237
A. The variable
is allocated in
int numb er; A memory.
num ber = 237; B B. The value 237
is assigned to
num ber = 35; C number.
number
C. The value 35
overwrites the
previous value 237.
Code State of Memory
Assigning Objects
Customer customer; customer
customer = new Customer( );
customer = new Customer( );
: Customer : Customer
A
B A. The variable is
Customer customer; allocated in memory.
customer
customer =
= new
new Customer(
Customer( );
);
B. The reference to the
customer = new Customer( ); new object is assigned
to customer.
customer
C C. The reference to
another object overwrites
the reference in customer.
Code State of Memory
Two References to a Single Object
Customer clemens, twain; clemens
clemens = new Customer( );
twain = clemens; twain
A : Customer
twain;
Customer clemens, twain,
B A. Variables are
allocated in memory.
clemens
clemens =
= new
new Customer(
Customer( );
);
B. The reference to the
twain = clemens; new object is assigned
to clemens.
clemens
C C. The reference in
clemens is assigned to
twain.
Code State of Memory
Assigning a primitive to a primitive
int first, second; first 5
first = 5;
second = first; second 5
A
B A. Variables are
int first, second;
allocated in memory.
first = 5;
second = first;
B. 5 is stored in first.
C
A. Value in first is
copied to second.
Code State of Memory
Actually, this is the same!
Customer clemens, twain; clemens
clemens = new Customer( );
twain = clemens; twain
C. The value in : Customer
clemens is copied to
twain.
Customer clemens, twain,
This value happens to be a
clemens = new Customer( ); reference to an object.
twain = clemens;
Hence: reference data type
C vs. primitive data types.
Code State of Memory
Numerical Data Types
There are six numerical data types: byte ,
shor t, in t, lo ng, f loat , and double .
Sample variable declarations:
int i, j, k;
float numberOne, numberTwo;
long bigInteger;
double bigNumber;
At the time a variable is declared, it also can be
initialized. For example,
int count = 10, height = 34;
Otherwise, it MAY be given a default value.
Try it out!
Numeric Data Types
The six data types differ in the precision of
values they can store in memory.
Type Content Default Size Minimum Value Maximum Value
Value
byte 1 byte -128 127
short 2 bytes -32768 32767
Integer 0
int 4 bytes -2147483648 2147483647
long 8 bytes -9223372036854775808 9223372036854775807
float 4 bytes -3.40282347E+38 3.40282347E+38
Real 0.0
doubl 8 bytes -1.79769313486231570E+308 1.79769313486231570E+308
e
Arithmetic Operators
The following table summarizes the
arithmetic operators available in Java.
Operation Java Example Value
Operator (x=10, y=7, z=2.5)
Addition x+y 17
+
Subtraction x-y 3
-
Multiplication x*y 70
*
Division x/y 1
/ 4.0
x/z
Modulo x%y 3
division
%
(remainder)
This is integer division
where the fractional part
is truncated.
Arithmetic expressions
An arithmetic expression is composed of numeric
values, numeric variables, and operators.
For example, given: in t i,j ;
i + 3
(i + 2*( j-i ))
-i + j
Expressions can be used to assign values:
i = j + 3;
Take the value of j, add 3 to it and assign that value
to i.
Arithmetic Expression
How is the following expression evaluated?
x + 3 * y
Answer: x is added to 3*y .
We determine the order of evaluation by
following precedence rules.
Evaluation is in order of precedence.
Operators at same level are evaluated left
to right for most operators.
Precedence Rules
Order Group Operator Rule
High Subexpression () Starting with innermost ()
Unary -, + Left to right.
operators
Multiplicative *, /, % Left to right.
operators
Additive +, - Left to right.
operators
Low
Precedence Examples
4 5 6
x + 4*y - x/z + 2/x = ?
1 2 3
x + (4*y) - (x/z) + (2/x)
6 4 7 5
(x + y * (4 - x) / z + 2 / -x ) =?
3 1 2
(x + ((y * (4-x)) / z) + (2 / (-x)))
To be safe, use parentheses!
Expression Types
What is the data type of
i + j;
Depends upon the types of i and j.
If they are both
in t then the result is also an int
do uble then the result is also a do uble
lo ng … long
Etc.
Similarly for the other operators: -,*, …
Type Casting
If x is a float and y is an int, what is the data type
of
x * y ?
The answer is float.
The above expression is called a mixed
expression.
Operands in mixed expressions are converted to
a common type based on promotion rules.
All are converted to the type with the highest
precision in the expression.
The entire expression is of this type too.
Implicit Type Casting
Consider the following expression:
double x = 3 + 5;
The result of 3 + 5 is of type int. However,
since the variable x is double, the value 8
(type int) is promoted to 8.0 (type double)
before being assigned to x.
byte short int long float double
Notice that it is a promotion. Demotion is not
allowed.
A higher precision value
int x = 3.5; cannot be assigned to a
lower precision variable.
Explicit Type Casting
Instead of relying on the promotion rules,
we can make an explicit type cast:
( <data type> ) <expression>
Example
Type cast x to float and
(float) x / 3 then divide it by 3.
Type cast the result of
(int) (x / y * 3.0) the expression x / y * 3.0
to int.
NOTE: Only the type of the return values is
changed -- not the data itself.
Explicit demotion
Promotion is automatically done whenever
necessary.
Demotion is not automatic, but can be
forced:
int x;
double y;
y = 3.5;
x = (int)y;
Assigning double ( or float) to integer types
results in truncation (not rounding).
Constants
We can change the value of a variable. If
we want the value to remain the same,
we use a constant.
final double PI = 3.14159;
final int MONTH_IN_YEAR = 12;
final short FARADAY_CONSTANT = 23060;
final float CARBON_MASS = 12.034F;
The reserved word These are constants,
These are called
final is used to also called named
literal constant.
declare constants. constant.
Why use Constants?
Consistent value
No errors due to mistyping.
Easy to manage
If we need to change the precision of PI, then
we change it only once in the program.
Programs are more readable.
Operators
Some assignments and operators are
combined into one operator to ease
programming.
Operator Usage Meaning
+= a+=b; a=a+b;
-= a-=b; a=a-b;
*= a*=b; a=a*b;
/= a/=b; a=a/b;
%= a%=b; a=a%b;
Type Mismatch
Suppose we want to input an age. Will this
work?
int age;
age = JOptionPane.showInputDialog(null, “Enter your age”);
• No.
A string value cannot be assigned directly to
an int variable.
Type Conversion
Wrapper classes are used to perform
necessary type conversions, such as
converting a String object to a numerical
value.
int age;
String inputStr;
inputStr = JOptionPane.showInputDialog(
null, “Enter your age”);
age = Integer.parseInt(inputStr);
Other Conversion Methods
Class Method Example
Integer parseInt Integer.parseInt(“25”) 25
Integer.parseInt(“25.3”) error
Long parseLong Long.parseLong(“25”) 25L
Long.parseLong(“25.3”) error
Float parseFloat Float.parseFloat(“25.3”) 25.3F
Float.parseFloat(“ab3”) error
Double parseDouble Double.parseDouble(“25”) 25.0
Integer.parseInt(“ab3”) error
CAUTION: Imprecision
It is not possible to exactly represent every
possible float (double) point number
Fixed number of bits
Float: 4 bytes -- 32 bits:232 (~1 billion) values
double: 8 bytes -- 64 bits: 264 (~1 million trillion) values
Infinite numbers (e.g. between 1.0 and 2.0)!
Floats and doubles may only store an
approximation of the actual number!!!!
Do not rely on exact values!
Integers are stored precisely though!
Sample Code Fragment
//code fragment to input radius and output
//area and circumference
double radius, area, circumference;
radiusStr = JOptionPane.showInputDialog(
null, "Enter radius: " );
radius = Double.parseDouble(radiusStr);
//compute area and circumference
area = PI * radius * radius;
circumference = 2.0 * PI * radius;
JOptionPane.showMessageDialog(null,
"Given Radius: " + radius + "\n" +
"Area: " + area + "\n" +
"Circumference: " + circumference);
Overloaded Operator +
The plus operator + can mean two different
operations, depending on the context.
<val1> + <val2> is an addition if both are
numbers. If either one of them is a String, then it
is a concatenation.
Evaluation goes from left to right.
output = “test” + 1 + 2; output = 1 + 2 + “test”;
The DecimalFormat Class
Use a DecimalFormat object to format the
numerical output.
double num = 123.45789345;
DecimalFormat df = new DecimalFormat(“0.000”);
//three decimal places
System.out.print(num); 123.45789345
System.out.print(df.format(num));
123.458
Standard Output
The showMessageDialog method is
intended for displaying short one-line
messages, not for a general-purpose
output mechanism.
Using System.out, we can output multiple
lines of text to the standard output window.
Standard Output Window
A sample standard output window for
displaying multiple lines of text.
• The exact style of standard output window
depends on the Java tool you use.
The print Method
We use the print method to output a value to the
standard output window.
The print method will continue printing from the
end of the currently displayed output.
Example
System.out.print( “Hello, Dr. Caffeine.” );
The println Method
We use println instead of print to skip a line.
int x = 123, y = x + x;
System.out.println( "Hello, Dr. Caffeine.“ );
System.out.print( " x = “ );
System.out.println( x );
System.out.print( " x + x = “ );
System.out.println( y );
System.out.println( " THE END“ );
Standard Input
The technique of using System.in to input
data is called standard input.
We can only input a single byte using
System.in directly.
To input primitive data values, we use the
Scanner class (from Java 5.0).
Scanner scanner;
scanner = Scanner.create(System.in);
int num = scanner.nextInt();
Common Scanner Methods:
Method Example
nextByte( ) byte b = scanner.nextByte( );
nextDouble( )double d = scanner.nextDouble( );
nextFloat( ) float f = scanner.nextFloat( );
nextInt( ) int i = scanner.nextInt( );
nextLong( ) long l = scanner.nextLong( );
nextShort( ) short s = scanner.nextShort( );
next() String str = scanner.next();
The Math class
The Math class in the java.lang package
contains class methods for commonly used
mathematical functions.
double num, x, y;
x = …;
y = …;
num = Math.sqrt(Math.max(x, y) + 12.4);
• Table 3.8 in the textbook contains a list of class
methods defined in the Math class.
Some Math Class Methods
Method Input Output Description
type type
exp(a) Return e raised to power a.
double double
log(a) Return natural log of a.
double double
floor(a) Return largest whole number
double double smaller than a.
max(a,b) Return larger of a or b.
int int
double double
… …
pow(a,b) Return a raised to power b.
double double
sqrt(a) Return square root of a.
double double
sin(a) Return sine of a(in radians).
double double
Table 3.8 page 113 in the textbook contains a list of
class methods defined in the Math class.
Computing the Height of a Pole
alphaRad = Math.toRadians(alpha);
betaRad = Math.toRadians(beta);
height = ( distance * Math.sin(alphaRad) * Math.sin(betaRad) )
/
Math.sqrt( Math.sin(alphaRad + betaRad) *
Math.sin(alphaRad - betaRad) );
The GregorianCalendar Class
Use a GregorianCalendar object to manipulate
calendar information
GregorianCalendar today, independenceDay;
today = new GregorianCalendar();
independenceDay
= new GregorianCalendar(1776, 6, 4);
//month 6 means July; 0 means January
Retrieving Calendar Information
This table shows the class constants for
retrieving different pieces of calendar information
from Date.
Constant Description
YEAR The year portion of the calendar date
MONTH The month portion of the calendar date
DATE The day of the month
DAY_OF_MONTH Same as DATE
DAY_OF_YEAR The day number within the year
DAY_OF_MONTH The day number within the month
DAY_OF_WEEK The day number within the week (Sun --1, Mon -- 2, etc.)
WEEK_OF_YEAR The week number within the year
WEEK_OF_MONTH The week number within the month
AM_PM The indicator for AM or PM (AM -- 0, PM -- 1)
HOUR The hour in the 12-hour notation
HOUR_OF_DAY The hour in 24-hour notation
MINUTE The minute within the hour
Sample Calendar Retrieval
GregorianCalendar cal = new GregorianCalendar();
//Assume today is Nov 9, 2003
System.out.print(“Today is ” +
(cal.get(Calendar.MONTH)+1) + “/” +
cal.get(Calendar.DATE) + “/” +
cal.get(Calendar.YEAR));
Output Today is 11/9/2003