Chapter 2 – Primitive Data Types
[email protected]
Mantra:
Coding is fun!
Chapter 2 Primitive Data Types and
Operations
• Introduce Programming with an Example
• Identifiers, Variables, and Constants
• Primitive Data Types
• byte, short, int, long, float, double, char, boolean
• Expressions
• Operators, Precedence, Associativity, Operand Evaluation Order: +
+, --, *, /, %, +=, -=, *=, /=, %=, ^, &, |, +, -,
• Getting Input from Input Dialog Boxes
• Case Study
• Style and Documentation Guidelines
• Syntax Errors, Runtime Errors, and Logic Errors
Introducing Programming with an
Example
Example 2.1 Computing the Area of
a Circle
This program computes the area of
the circle.
Identifiers
• An identifier is a sequence of characters
that consist of letters, digits, underscores
(_), and dollar signs ($).
• An identifier must start with a letter, an
underscore (_), or a dollar sign ($). It
cannot start with a digit.
• An identifier cannot be a reserved word. (See Appendix A,
“Java Keywords,” for a list of reserved words).
• An identifier cannot be true, false, or
null.
• An identifier can be of any length.
Variables
// Compute the first area
radius = 1.0;
area = radius*radius*3.14159;
System.out.println("The area is “ + area + " for
radius "+radius);
// Compute the second area
radius = 2.0;
area = radius*radius*3.14159;
System.out.println("The area is “ + area + " for
radius "+radius);
Declaring Variables
int x; // Declare x to be an
// integer variable;
double radius; // Declare radius to
// be a double variable;
char a; // Declare a to be a
// character variable;
Assignment Statements
x = 1; // Assign 1 to x;
radius = 1.0; // Assign 1.0 to radius;
a = 'A'; // Assign 'A' to a;
Declaring and Initializing
in One Step
• int x = 1;
• double d = 1.4;
• float f = 1.4;
Is this statement correct?
Constants
final datatype CONSTANTNAME = VALUE;
final double PI = 3.14159;
final int SIZE = 3;
Numerical Data Types
byte 8 bits
short 16 bits
int 32 bits
long 64 bits
float 32 bits
double 64 bits
Operators
+, -, *, /, and %
5/2 yields an integer 2.
5.0/2 yields a double value 2.5
5 % 2 yields 1 (the remainder of the
division)
NOTE
Calculations involving floating-point numbers are approximated
because these numbers are not stored with complete accuracy.
For example,
System.out.println(1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);
displays 0.5000000000000001, not 0.5, and
System.out.println(1.0 - 0.9);
displays 0.09999999999999998, not 0.1. Integers are stored
precisely. Therefore, calculations with integers yield a
precise integer result.
Number Literals
A literal is a constant value that
appears directly in the program. For
example, 34, 1,000,000, and 5.0 are
literals in the following statements:
int i = 34;
long l = 1000000;
double d = 5.0;
Integer Literals
An integer literal can be assigned to an integer
variable as long as it can fit into the variable. A
compilation error would occur if the literal were
too large for the variable to hold. For example,
the statement byte b = 1000 would cause a
compilation error, because 1000 cannot be stored in
a variable of the byte type.
An integer literal is assumed to be of the int type,
whose value is between -231 (-2147483648) to 231–1
(2147483647). To denote an integer literal of the
long type, append it with the letter L or l. L is
preferred because l (lowercase L) can easily be
confused with 1 (the digit one).
Floating-Point Literals
Floating-point literals are written
with a decimal point. By default, a
floating-point literal is treated as a
double type value. For example, 5.0 is
considered a double value, not a float
value. You can make a number a float
by appending the letter f or F, and
make a number a double by appending
the letter d or D. For example, you
can use 100.2f or 100.2F for a float
number, and 100.2d or 100.2D for a
double number.
Scientific Notation
Floating-point literals can also be
specified in scientific notation, for
example, 1.23456e+2, same as
1.23456e2, is equivalent to 123.456,
and 1.23456e-2 is equivalent to
0.0123456. E (or e) represents an
exponent and it can be either in
lowercase or uppercase.
Arithmetic Expressions
3 4 x 10( y 5)( a b c ) 4 9x
9( )
5 x x y
is translated to
(3+4*x)/5 – 10*(y-5)*(a+b+c)/x +
9*(4/x + (9+x)/y)
Shortcut Assignment Operators
Operator Example Equivalent
+= i+=8 i = i+8
-= f-=8.0 f = f-8.0
*= i*=8 i = i*8
/= i/=8 i = i/8
%= i%=8 i = i%8
Increment and
Decrement Operators
suffix
x++; // Same as x = x + 1;
prefix
++x; // Same as x = x + 1;
suffix
x––; // Same as x = x - 1;
prefix
––x; // Same as x = x - 1;
Increment and
Decrement Operators, cont.
int i=10; Equivalent to
int newNum = 10*i++; int newNum = 10*i;
i = i + 1;
int i=10; Equivalent to
int newNum = 10*(++i); i = i + 1;
int newNum = 10*i;
Increment and
Decrement Operators, cont.
Using increment and decrement operators
makes expressions short, but it also
makes them complex and difficult to
read. Avoid using these operators in
expressions that modify multiple
variables, or the same variable for
multiple times such as this: int k = ++i
+ i.
Numeric Type Conversion
Consider the following statements:
byte i = 100;
long k = i*3+4;
double d = i*3.1+k/2;
int x = k; //(Wrong)
long k = x; //(fine,implicit casting)
Type Casting
• double
• float
• long
• int
• short
• byte
Type Casting, cont.
Implicit casting
double d = 3; (type widening)
Explicit casting
int i = (int)3.0; (type narrowing)
What is wrong? int x = 5/2.0;
Character Data Type
char letter = 'A'; (ASCII)
char numChar = '4'; (ASCII)
char letter = '\u0041'; (Unicode)
char numChar = '\u0034'; (Unicode)
Special characters
char tab = ‘\t’;
Unicode Format
Description Escape Sequence Unicode
Backspace \b \u0008
Tab \t \u0009
Linefeed \n \u000a
Carriage return \r \u000d
The boolean Type and Operators
boolean lightsOn = true;
boolean lightsOn = false;
boolean b = (1 > 2);
• && (and) (1 < x) && (x < 100)
• || (or) (lightsOn) || (isDayTime)
• ! (not) !(isStopped)
Comparison Operators
Operator Name
< less than
<= less than or equal to
> greater than
>= greater than or equal to
== equal to
!= not equal to
Boolean Operators
Operator Name
! not
&& and
|| or
^ exclusive or
Truth Table for Operator !
Truth Table for Operator !
Operand !Operand
true false
false true
Truth Table for Operator &&
Operand1 Operand2 Operand1 && Operand2
false false false
false true false
true false false
true true true
Truth Table for Operator ||
Operand1 Operand2 Operand1 || Operand2
false false false
false true true
true false true
true true true
Truth Table for Operator ^
Operand1 Operand2 Operand1 ^ Operand2
false false false
false true true
true false true
true true false
The & and | Operators
&&: conditional AND operator
&: unconditional AND operator
||: conditional OR operator
|: unconditional OR operator
exp1 && exp2
(1 < x) && (x < 100)
(1 < x) & (x < 100)
The & and | Operators
If x is 1, what is x after this expression?
(x > 1) & (x++ < 10)
If x is 1, what is x after this expression?
(1 > x) && ( 1 > x++)
How about (1 == x) | (10 > x++)?
(1 == x) || (10 > x++)?
Operator Precedence
How to evaluate
3 + 4 * 4 > 5 * (4 + 3) - ++i
Operator Precedence
• var++, var-- • ^ (Exclusive OR)
• +, - (Unary plus and minus), + • | (Unconditional OR)
+var,--var
• && (Conditional AND) Short-circuit
• (type) Casting AND
• ! (Not) • || (Conditional OR) Short-circuit
OR
• *, /, % (Multiplication, division,
and modulus) • =, +=, -=, *=, /=, %= (Assignment
operator)
• +, - (Binary addition and
subtraction)
• <, <=, >, >= (Comparison)
• ==, !=; (Equality)
• & (Unconditional AND)
Operator Associativity
When two operators with the same precedence are
evaluated, the associativity of the operators
determines the order of evaluation. All binary
operators except assignment operators are left-
associative.
a – b + c – d is equivalent to ((a – b) + c) – d
Assignment operators are right-associative.
Therefore, the expression
a = b += c = 5 is equivalent to a = (b += (c =
5))
Operand Evaluation Order
The precedence and associativity rules specify
the order of the operators, but do not specify
the order in which the operands of a binary
operator are evaluated. Operands are evaluated
from left to right in Java.
The left-hand operand of a binary operator is
evaluated before any part of the right-hand
operand is evaluated.
Operand Evaluation Order, cont.
If no operands have side effects that change the
value of a variable, the order of operand evaluation
is irrelevant. Interesting cases arise when operands
do have a side effect. For example, x becomes 1 in
the following code, because a is evaluated to 0
before ++a is evaluated to 1.
int a = 0;
int x = a + (++a);
But x becomes 2 in the following code, because ++a is
evaluated to 1, then a is evaluated to 1.
int a = 0;
int x = ++a + a;
Getting Input from Input Dialog Boxes
String string = JOptionPane.showInputDialog(
null, “Prompt Message”, “Dialog Title”,
JOptionPane.QUESTION_MESSAGE));
where x is a string for the prompting message
and y is a string for the title of the input
dialog box.
Convertting Strings to Integers
The input returned from the input dialog box is a
string. If you enter a numeric value such as 123, it
returns “123”. To obtain the input as a number, you
have to convert a string into a number.
To convert a string into an int value, you can use the
static parseInt method in the Integer class as follows:
int intValue = Integer.parseInt(intString);
where intString is a numeric string such as “123”.
Convertting Strings to Doubles
To convert a string into a double value,
you can use the static parseDouble
method in the Double class as follows:
double doubleValue
=Double.parseDouble(doubleString);
where doubleString is a numeric string
such as “123.45”.
Example 2.2
Entering Input from Dialog Boxes
This program first prompts the
user to enter a year as an int
value and checks if it is a
leap year, it then prompts you
to enter a double value and
checks if it is positive.
A year is a leap year if it is
divisible by 4 but not by 100,
or it is divisible by 400.
Programming Style and Documentation
• Appropriate Comments
• Naming Conventions
• Proper Indentation and Spacing
Lines
• Block Styles
Appropriate Comments
Include a summary at the beginning of the program
to explain what the program does, its key features,
its supporting data structures, and any unique
techniques it uses.
Include your name, department, instruction, date, and
a brief description at the beginning of the program.
Naming Conventions
• Choose meaningful and descriptive names.
• Variables and method names:
• Use lowercase. If the name consists of several words, concatenate
all in one, use lowercase for the first word, and capitalize the first
letter of each subsequent word in the name. For example, the
variables radius and area, and the method
computeArea.
Naming Conventions, cont.
• Class names:
• Capitalize the first letter of each word in the name.
For example, the class name ComputeArea.
• Constants:
• Capitalize all letters in constants. For example, the
constant PI.
Proper Indentation and Spacing
• Indentation
• Indent two spaces.
• Spacing
• Use blank line to separate segments of the
code.
Block Styles
Use end-of-line style for braces.
Next-line public class Test
style {
public static void main(String[] args)
{
System.out.println("Block Styles");
}
}
End-of-line
style
public class Test {
public static void main(String[] args) {
System.out.println("Block Styles");
}
}
Programming Errors
• Syntax Errors
• Detected by the compiler
• Runtime Errors
• Causes the program to abort
• Logic Errors
• Produces incorrect result
Compilation Errors
public class ShowSyntaxErrors {
public static void main(String[] args) {
i = 30;
System.out.println(i+4);
}
}
Runtime Errors
public class ShowRuntimeErrors {
public static void main(String[] args) {
int i = 1 / 0;
}
}
Logic Errors
public class ShowLogicErrors {
// Determine if a number is between 1 and 100 inclusively
public static void main(String[] args) {
// Prompt the user to enter a number
String input = JOptionPane.showInputDialog(null,
"Please enter an integer:",
"ShowLogicErrors", JOptionPane.QUESTION_MESSAGE);
int number = Integer.parseInt(input);
// Display the result
System.out.println("The number is between 1 and 100, " +
"inclusively? " + ((1 < number) && (number < 100)));
System.exit(0);
}
}
Practice
Void
[modifiers] void MethodName ([type arg], [type2 arg2], [type3
arg3], …) {
// Statements
}
Function
[modifiers] return_type MethodName ([type arg], [type2 arg2],
[type3 arg3], …) {
// Statements…
// return
return xxx; //where xxx is same type as return_type
}
public static void main (String [] args) {
// Here we declare and assign at the same time
double x = 1;
double y = 1;
/* We have not declared a third variable for the sum
* rather, we are summing on the output
*/
// Implement the Write method
Write ("The sum is " + Sum (x , y) ) ;
} // End of method
// A method that accepts a String, and writes it on the console
public static void Write (String w) {
System.out.println(w);
}
public static double Sum (double x, double y){
double answer = x + y;
return answer;
}