advanced programming language msc. nguyen cao dat [email protected]
TRANSCRIPT
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6
FUNDAMENTALS OF PROGRAMMING
Chapter I
2
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6
Content
Introduction Primitive Data Types and Operations Control Statements Loop Statements Methods
3
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 4
IntroductionWhy Java?
- Java is a general purpose programming language.
- Java is the Internet programming language.
- Java can be used to develop Web applications.
- Java can also be used to develop applications for hand-held devices such as Palm and cell phone
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 5
Introduction
Examples of Java’s VersatilityStandalone Application: TicTacToe
Applet: TicTacToeServlets: SelfTest Web site Mobile Computing: Cell phones
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 6
TicTacToe Standalone
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 7
TicTacToe Applet
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 8
SelfTest Website (using Java Servlets)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 9
PDA and Cell Phone
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 10
Introduction Java’s History
– James Gosling and Sun Microsystems
– Oak
– Java, May 20, 1995, Sun World
– HotJava The first Java-enabled Web browser
– Early History Website:
http://java.sun.com/features/1998/05/birthday.html
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 11
Introduction Characteristics of Java
– Java Is Simple – Java Is Object-Oriented – Java Is Distributed – Java Is Interpreted – Java Is Robust – Java Is Secure – Java Is Architecture-Neutral – Java Is Portable – Java Is Multithreaded – Java Is Dynamic
www.cs.armstrong.edu/liang/intro6e/JavaCharacteristics.pdf
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 12
Introduction JDK(Java Development Kit) Versions
– JDK 1.02 (1995)– JDK 1.1 (1996)– JDK 1.2 (1998)– JDK 1.3 (2000)– JDK 1.4 (2002)– JDK 1.5 (2004) a. k. a. JDK 5 or Java 5
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 13
Introduction JDK Editions
– Java Standard Edition (J2SE) J2SE can be used to develop client-side standalone
applications or applets.
– Java Enterprise Edition (J2EE) J2EE can be used to develop server-side applications
such as Java servlets and Java ServerPages.
– Java Micro Edition (J2ME). J2ME can be used to develop applications for mobile
devices such as cell phones.
This course uses J2SE to introduce Java programming.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 14
Introduction
//This program prints Welcome to Java! public class Welcome { public static void main(String[] args) { System.out.println("Welcome to Java!"); }}
A Simple Java Program
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 15
Creating, Compiling, and Running Programs
Source Code
Create/Modify Source Code
Compile Source Code i.e., javac Welcome.java
Bytecode
Run Byteode i.e., java Welcome
Result
If compilation errors
If runtime errors or incorrect result
public class Welcome { public static void main(String[] args) { System.out.println("Welcome to Java!"); } }
… Method Welcome() 0 aload_0 … Method void main(java.lang.String[]) 0 getstatic #2 … 3 ldc #3 <String "Welcome to Java!"> 5 invokevirtual #4 … 8 return
Saved on the disk
stored on the disk
Source code (developed by the programmer)
Byte code (generated by the compiler for JVM to read and interpret, not for you to understand)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 16
Compiling and Running Java from the Command Window
Set path to JDK bin directory– set path=c:\Program Files\java\jdk1.5.0\bin
Set classpath to include the current directory– set classpath=.
Compile– javac Welcome.java
Run– java Welcome
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 17
Introduction Anatomy of a Java Program
– Comments
– Package
– Reserved words
– Modifiers
– Statements
– Blocks
– Classes
– Methods
– The main method
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 18
Comments
In Java, comments are preceded by two slashes (//) in a line, or enclosed between /* and */ in one or multiple lines. When the compiler sees //, it ignores all text after // in the same line. When it sees /*, it scans for the next */ and ignores any text between /* and */.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 19
Package
The second line in the program (package chapter1;) specifies a package name, chapter1, for the class Welcome. IDE compiles the source code in Welcome.java, generates Welcome.class, and stores Welcome.class in the chapter1 folder.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 20
Reserved Words
Reserved words or keywords are words that have a specific meaning to the compiler and cannot be used for other purposes in the program. For example, when the compiler sees the word class, it understands that the word after class is the name for the class. Other reserved words in Listing 1.1 are public, static, and void. Their use will be introduced later in the book.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 21
Modifiers
Java uses certain reserved words called modifiers that specify the properties of the data, methods, and classes and how they can be used. Examples of modifiers are public and static. Other modifiers are private, final, abstract, and protected. A public datum, method, or class can be accessed by other programs. A private datum or method cannot be accessed by other programs. Modifiers are discussed in Chapter 6, “Objects and Classes.”
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 22
Classes
The class is the essential Java construct. A class is a template or blueprint for objects. To program in Java, you must understand classes and be able to write and use them. The mystery of the class will continue to be unveiled throughout this course. For now, though, understand that a program is defined by using one or more classes.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 23
MethodsWhat is System.out.println? It is a method: a collection of statements that performs a sequence of operations to display a message on the console. It can be used even without fully understanding the details of how it works. It is used by invoking a statement with a string argument. The string argument is enclosed within parentheses. In this case, the argument is "Welcome to Java!" You can call the same println method with a different argument to print a different message.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 24
main MethodThe main method provides the control of program flow. The Java interpreter executes the application by invoking the main method.
The main method looks like this:
public static void main(String[] args) {
// Statements;
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 25
Displaying Text in a Message Dialog Box
you can use the showMessageDialog method in the JOptionPane class. JOptionPane is one of the many predefined classes in the Java system, which can be reused rather than “reinventing the wheel.”
RunRun
SourceSourceIMPORTANT NOTE: To run the program from the Run button, (1) set c:\jdk1.5.0\bin for path, and (2) install slides from the Instructor Resource Website to a directory (e.g., c:\LiangIR) .
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 26
The showMessageDialog Method
JOptionPane.showMessageDialog(null, "Welcome to Java!", “Display Message", JOptionPane.INFORMATION_MESSAGE));
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 27
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, ornull.
An identifier can be of any length.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 28
Variables
// Compute the first arearadius = 1.0;area = radius * radius * 3.14159;System.out.println("The area is “ + area + " for radius "+radius);
// Compute the second arearadius = 2.0;area = radius * radius * 3.14159;System.out.println("The area is “ + area + " for radius "+radius);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 29
Declaring Variablesint 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;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 30
Assignment Statements
x = 1; // Assign 1 to x;
radius = 1.0; // Assign 1.0 to radius;
a = 'A'; // Assign 'A' to a;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 31
Declaring and Initializingin One Step
int x = 1;
double d = 1.4;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 32
Constants
final datatype CONSTANTNAME = VALUE;
final double PI = 3.14159;
final int SIZE = 3;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 33
Numerical Data Types
Name Range Storage Size
byte –27 (-128) to 27–1 (127) 8-bit signed
short –215 (-32768) to 215–1 (32767) 16-bit signed
int –231 (-2147483648) to 231–1 (2147483647) 32-bit signed
long –263 to 263–1 64-bit signed (i.e., -9223372036854775808 to 9223372036854775807)
float Negative range: 32-bit IEEE 754 -3.4028235E+38 to -1.4E-45 Positive range: 1.4E-45 to 3.4028235E+38
double Negative range: 64-bit IEEE 754 -1.7976931348623157E+308 to -4.9E-324 Positive range: 4.9E-324 to 1.7976931348623157E+308
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 34
Numeric Operators
Name Meaning Example Result
+ Addition 34 + 1 35 - Subtraction 34.0 – 0.1 33.9 * Multiplication 300 * 30 9000 / Division 1.0 / 2.0 0.5 % Remainder 20 % 3 33.9
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 35
Integer Division
+, -, *, /, 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)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 36
Remainder OperatorRemainder is very useful in programming. For example, an even number % 2 is always 0 and an odd number % 2 is always 1. So you can use this property to determine whether a number is even or odd. Suppose today is Saturday and you and your friends are going to meet in 10 days. What day is in 10 days? You can find that day is Tuesday using the following expression:
Saturday is the 6th day in a week A week has 7 days
January has 31 days The 2nd day in a week is Tuesday
(6 + 31) % 7 is 2
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 37
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.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 38
Arithmetic Expressions
)94
(9))(5(10
5
43
y
x
xx
cbayx
is translated to
(3+4*x)/5 – 10*(y-5)*(a+b+c)/x + 9*(4/x + (9+x)/y)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 39
Example: Converting Temperatures
Write a program that converts a Fahrenheit degree to Celsius using the formula:
)32)(( 95 fahrenheitcelsius
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 40
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
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 41
Increment andDecrement Operators
Operator Name Description++var preincrement The expression (++var) increments var
by 1 and evaluates to the new value in var after the
increment.var++ postincrement The expression (var++) evaluates to the
original value in var and increments var by 1.
--var predecrement The expression (--var) decrements var by 1 and evaluates
to the new value in var after the decrement.
var-- postdecrement The expression (var--) evaluates to the original value
in var and decrements var by 1.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 42
Increment andDecrement Operators, cont.
int i = 10; int newNum = 10 * i++;
int newNum = 10 * i; i = i + 1;
Same effect as
int i = 10; int newNum = 10 * (++i);
i = i + 1; int newNum = 10 * i;
Same effect as
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 43
Increment andDecrement 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.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 44
Assignment Expressions and Assignment Statements
Prior to Java 2, all the expressions can be used as statements. Since Java 2, only the following types of expressions can be statements:
variable op= expression; // Where op is +, -, *, /, or %
++variable;
variable++;
--variable;
variable--;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 45
Numeric Type Conversion
Consider the following statements:
byte i = 100;
long k = i * 3 + 4;
double d = i * 3.1 + k / 2;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 46
Conversion RulesWhen performing a binary operation involving two operands of different types, Java automatically converts the operand based on the following rules:
1. If one of the operands is double, the other is
converted into double.2. Otherwise, if one of the operands is float, the other is
converted into float.3. Otherwise, if one of the operands is long, the other is
converted into long.4. Otherwise, both operands are converted into int.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 47
Type CastingImplicit casting double d = 3; (type widening)
Explicit casting int i = (int)3.0; (type narrowing) int i = (int)3.9; (Fraction part is truncated)
What is wrong? int x = 5 / 2.0;
byte, short, int, long, float, double
range increases
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 48
Character Data Type
char letter = 'A'; (ASCII)
char numChar = '4'; (ASCII)
char letter = '\u0041'; (Unicode)
char numChar = '\u0034'; (Unicode)
Four hexadecimal digits.
NOTE: The increment and decrement operators can also be used on char variables to get the next or preceding Unicode character. For example, the following statements display character b
char ch = 'a';
System.out.println(++ch);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 49
Unicode FormatJava characters use Unicode, a 16-bit encoding scheme established by the Unicode Consortium to support the interchange, processing, and display of written texts in the world’s diverse languages. Unicode takes two bytes, preceded by \u, expressed in four hexadecimal numbers that run from '\u0000' to '\uFFFF'. So, Unicode can represent 65535 + 1 characters.
Unicode \u03b1 \u03b2 \u03b3 for three Greek letters
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 50
Example: Displaying Unicodes
Write a program that displays two Chinese characters and three Greek letters.
DisplayUnicodeDisplayUnicode RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 51
Escape Sequences for Special Characters
Description Escape Sequence Unicode
Backspace \b \u0008
Tab \t \u0009
Linefeed \n \u000A
Carriage return \r \u000D
Backslash \\ \u005C
Single Quote \' \u0027
Double Quote \" \u0022
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 52
Appendix B: ASCII Character SetASCII Character Set is a subset of the Unicode from \u0000 to \u007f
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 53
ASCII Character Set, cont.ASCII Character Set is a subset of the Unicode from \u0000 to \u007f
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 54
Casting between char and Numeric Types
int i = 'a'; // Same as int i = (int)'a';
char c = 97; // Same as char c = (char)97;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 55
The String Type The char type only represents one character. To represent a string of characters, use the data type called String. For example, String message = "Welcome to Java"; String is actually a predefined class in the Java library just like the System class and JOptionPane class. The String type is not a primitive type. It is known as a reference type. Any Java class can be used as a reference type for a variable. Reference data types will be thoroughly discussed in Chapter 6, “Classes and Objects.” For the time being, you just need to know how to declare a String variable, how to assign a string to the variable, and how to concatenate strings.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 56
String Concatenation // Three strings are concatenatedString message = "Welcome " + "to " + "Java"; // String Chapter is concatenated with number 2String s = "Chapter" + 2; // s becomes Chapter2 // String Supplement is concatenated with character BString s1 = "Supplement" + 'B'; // s becomes SupplementB
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 57
Obtaining Input1. Using JOptionPane input dialogs
2. Using Scanner class
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 58
Getting Input from Input Dialog Boxes
String string = JOptionPane.showInputDialog(
null, “Prompting Message”, “Dialog Title”,
JOptionPane.QUESTION_MESSAGE));
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 59
Two Ways to Invoke the Method There are several ways to use the showInputDialog method. For the time being, you only need to know two ways to invoke it.One is to use a statement as shown in the example:
String string = JOptionPane.showInputDialog(null, x, y, 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.
The other is to use a statement like this:JOptionPane.showInputDialog(x);
where x is a string for the prompting message.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 60
Converting 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”.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 61
Converting 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”.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 62
Example: Computing Loan Payments
ComputeLoanComputeLoan RunRun
This program lets the user enter the interest rate, number of years, and loan amount and computes monthly payment and total payment.
12)1(11
arsnumberOfYeerestRatemonthlyInt
erestRatemonthlyIntloanAmount
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 63
Example: Monetary Units
This program lets the user enter the amount in decimal representing dollars and cents and output a report listing the monetary equivalent in single dollars, quarters, dimes, nickels, and pennies. Your program should report maximum number of dollars, then the maximum number of quarters, and so on, in this order.
ComputeChangeComputeChange RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 64
Example: Displaying Current TimeWrite a program that displays current time in GMT in the format hour:minute:second such as 1:45:19.
The currentTimeMillis method in the System class returns the current time in milliseconds since the midnight, January 1, 1970 GMT. (1970 was the year when the Unix operating system was formally introduced.) You can use this method to obtain the current time, and then compute the current second, minute, and hour as follows.
ShowCurrentTimeShowCurrentTime
RunRun
Elapsed time
Unix Epoch 01-01-1970
00:00:00 GMT
Current Time
Time
System.CurrentTimeMills()
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 65
Getting Input Using Scanner1. Create a Scanner object
Scanner scanner = new Scanner(System.in);
2. Use the methods next(), nextByte(), nextShort(), nextInt(), nextLong(), nextFloat(), nextDouble(), or nextBoolean() to obtain to a string, byte, short, int, long, float, double, or boolean value. For example,
System.out.print("Enter a double value: ");Scanner scanner = new Scanner(System.in);double d = scanner.nextDouble();
TestScannerTestScanner RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 66
Programming Style and Documentation
Appropriate Comments Naming Conventions Proper Indentation and Spacing
Lines Block Styles
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 67
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, class section, instructor, date, and a brief description at the beginning of the program.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 68
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.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 69
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, and use
underscores to connect words. For example, the constant PI and MAX_VALUE
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 70
Proper Indentation and Spacing
Indentation– Indent two spaces.
Spacing – Use blank line to separate segments of the code.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 71
Block Styles
Use end-of-line style for braces.
public class Test { public static void main(String[] args) { System.out.println("Block Styles"); } }
public class Test { public static void main(String[] args) {
System.out.println("Block Styles"); } }
End-of-line style
Next-line style
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 72
The boolean Type and Operators
Often in a program you need to compare two values, such as whether i is greater than j. Java provides six comparison operators (also known as relational operators) that can be used to compare two values. The result of the comparison is a Boolean value: true or false.
boolean b = (1 > 2);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 73
Comparison Operators
Operator Name
< less than
<= less than or equal to
> greater than
>= greater than or equal to
== equal to
!= not equal to
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 74
Boolean Operators
Operator Name
! not
&& and
|| or
^ exclusive or
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 75
Examples
System.out.println("Is " + num + " divisible by 2 and 3? " +
((num % 2 == 0) && (num % 3 == 0)));
System.out.println("Is " + num + " divisible by 2 or 3? " +
((num % 2 == 0) || (num % 3 == 0)));
System.out.println("Is " + num +
" divisible by 2 or 3, but not both? " +
((num % 2 == 0) ^ (num % 3 == 0)));
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 76
Example: Determining Leap Year?
LeapYearLeapYear RunRun
This program first prompts the user to enter a year as an int value and checks if it is a leap year.
A year is a leap year if it is divisible by 4 but not by 100, or it is divisible by 400.
(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 77
Example: A Simple Math Learning Tool
AdditionTutorAdditionTutor RunRun
This example creates a program to let a first grader practice additions. The program randomly generates two single-digit integers number1 and number2 and displays a question such as “What is 7 + 9?” to the student, as shown below. After the student types the answer in the input dialog box, the program displays a message dialog box to indicate whether the answer is true or false.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 78
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)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 79
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++)?
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 80
Selection Statements
if Statements
switch Statements
Conditional Operators
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 81
TIP
if (number % 2 == 0) even = true; else even = false;
(a)
Equivalent boolean even = number % 2 == 0;
(b)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 82
CAUTION
if (even == true) System.out.println( "It is even.");
(a)
Equivalent if (even) System.out.println( "It is even.");
(b)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 83
Example: An Improved Math Learning
Tool This example creates a program to teach a first grade child how to learn subtractions. The program randomly generates two single-digit integers number1 and number2 with number1 > number2 and displays a question such as “What is 9 – 2?” to the student, as shown in the figure. After the student types the answer in the input dialog box, the program displays a message dialog box to indicate whether the answer is correct, as shown in figure.
SubtractionTutorSubtractionTutor Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 84
Example: Guessing Birth Date
GuessBirthDateGuessBirthDate Run
The program can guess your birth date. Run to see how it works.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 85
Conditional Operator, cont.
(booleanExp) ? exp1 : exp2
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 86
Formatting Output Use the new JDK 1.5 printf statement.
System.out.printf(format, items);
Where format is a string that may consist of substrings and format specifiers. A format specifier specifies how an item should be displayed. An item may be a numeric value, character, boolean value, or a string. Each specifier begins with a percent sign.
JDK 1.5Feature
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 87
Frequently-Used Specifiers JDK 1.5Feature
Specifier Output Example
%b a boolean value true or false
%c a character 'a'
%d a decimal integer 200
%f a floating-point number 45.460000
%e a number in standard scientific notation 4.556000e+01
%s a string "Java is cool"
int count = 5;
double amount = 45.56;
System.out.printf("count is %d and amount is %f", count, amount);
display count is 5 and amount is 45.560000
items
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 88
Creating Formatted StringsSystem.out.printf(format, item1, item2, ..., itemk)
String.format(format, item1, item2, ..., itemk)
String s = String.format("count is %d and amount is %f", 5, 45.56));
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 89
Operator Precedence var++, var-- +, - (Unary plus and minus), ++var,--var (type) Casting ! (Not) *, /, % (Multiplication, division, and remainder) +, - (Binary addition and subtraction) <, <=, >, >= (Comparison) ==, !=; (Equality) & (Unconditional AND) ^ (Exclusive OR) | (Unconditional OR) && (Conditional AND) Short-circuit AND || (Conditional OR) Short-circuit OR =, +=, -=, *=, /=, %= (Assignment operator)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 90
while Loop Flow Chart
while (loop-continuation-condition) {
// loop-body;
Statement(s);
}
int count = 0;
while (count < 100) {
System.out.println("Welcome to Java!");
count++;
}
Loop Continuation Condition?
true
Statement(s) (loop body)
false (count < 100)?
true
System.out.println("Welcome to Java!"); count++;
false
(A) (B)
count = 0;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 91
Example: An Advanced Math Learning Tool
The Math subtraction learning tool program generates just one question for each run. You can use a loop to generate questions repeatedly. This example gives a program that generates ten questions and reports the number of the correct answers after a student answers all ten questions.
IMPORTANT NOTE: To run the program from the Run button, (1) set c:\jdk1.5.0\bin for path, and (2) install slides from the Instructor Resource Website to a directory (e.g., c:\LiangIR) .
SubtractionTutorLoopSubtractionTutorLoop Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 92
Ending a Loop with a Sentinel Value
Often the number of times a loop is executed is not predetermined. You may use an input value to signify the end of the loop. Such a value is known as a sentinel value.
Write a program that reads and calculates the sum of an unspecified number of integers. The input 0 signifies the end of the input.
SentinelValueSentinelValue Run
IMPORTANT NOTE: To run the program from the Run button, (1) set c:\jdk1.5.0\bin for path, and (2) install slides from the Instructor Resource Website to a directory (e.g., c:\LiangIR) .
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 93
CautionDon’t use floating-point values for equality checking in a loop control. Since floating-point values are approximations, using them could result in imprecise counter values and inaccurate results. This example uses int value for data. If a floating-point type value is used for data, (data != 0) may be true even though data is 0.
// data should be zerodouble data = Math.pow(Math.sqrt(2), 2) - 2; if (data == 0) System.out.println("data is zero");else System.out.println("data is not zero");
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 94
do-while Loop
do {
// Loop body;
Statement(s);
} while (loop-continuation-condition);
Loop Continuation Condition?
true
Statement(s) (loop body)
false
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 95
for Loopsfor (initial-action; loop-
continuation-condition; action-after-each-iteration) {
// loop body; Statement(s);}
int i;for (i = 0; i < 100; i++) { System.out.println( "Welcome to Java!"); }
Loop Continuation Condition?
true
Statement(s) (loop body)
false
(A)
Action-After-Each-Iteration
Initial-Action
(i < 100)?
true
System.out.println( "Welcome to Java");
false
(B)
i++
i = 0
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 96
NoteThe initial-action in a for loop can be a list of zero or more comma-separated expressions. The action-after-each-iteration in a for loop can be a list of zero or more comma-separated statements. Therefore, the following two for loops are correct. They are rarely used in practice, however.
for (int i = 1; i < 100; System.out.println(i++));
for (int i = 0, j = 0; (i + j < 10); i++, j++) {
// Do something
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 97
NoteIf the loop-continuation-condition in a for loop is omitted, it is implicitly true. Thus the statement given below in (a), which is an infinite loop, is correct. Nevertheless, it is better to use the equivalent loop in (b) to avoid confusion:
for ( ; ; ) { // Do something } (a)
Equivalent while (true) { // Do something }
(b)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 98
Example: Using for Loops
Problem: Write a program that sums a series that starts with 0.01 and ends with 1.0. The numbers in the series will increment by 0.01, as follows: 0.01 + 0.02 + 0.03 and so on.
TestSumTestSum Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 99
Nested Loops
Problem: Write a program that uses nested for loops to print a multiplication table.
TestMultiplicationTableTestMultiplicationTable
Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 100
Example:Finding the Greatest Common Divisor Problem: Write a program that prompts the user to enter two positive integers and finds their greatest common divisor.
Solution: Suppose you enter two integers 4 and 2, their greatest common divisor is 2. Suppose you enter two integers 16 and 24, their greatest common divisor is 8. So, how do you find the greatest common divisor? Let the two input integers be n1 and n2. You know number 1 is a common divisor, but it may not be the greatest commons divisor. So you can check whether k (for k = 2, 3, 4, and so on) is a common divisor for n1 and n2, until k is greater than n1 or n2.
GreatestCommonDivisorGreatestCommonDivisor RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 101
Example: Finding the Sales Amount
Problem: You have just started a sales job in a department store. Your pay consists of a base salary and a commission. The base salary is $5,000. The scheme shown below is used to determine the commission rate.
Sales Amount Commission Rate$0.01–$5,000 8 percent$5,000.01–$10,000 10 percent$10,000.01 and above 12 percent
Your goal is to earn $30,000 in a year. Write a program that will find out the minimum amount of sales you have to generate in order to make $30,000.
FindSalesAmountFindSalesAmount RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 102
Example: Displaying a Pyramid of Numbers
Problem: Write a program that prompts the user to enter an integer from 1 to 15 and displays a pyramid. For example, if the input integer is 12, the output is shown below.
PrintPyramidPrintPyramid RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 103
Using break and continue
Examples for using the break and continue keywords:
TestBreak.java
TestContinue.java
TestBreakTestBreak
TestContinueTestContinue
Run
Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 104
Example: Displaying Prime Numbers
Problem: Write a program that displays the first 50 prime numbers in five lines, each of which contains 10 numbers. An integer greater than 1 is prime if its only positive divisor is 1 or itself. For example, 2, 3, 5, and 7 are prime numbers, but 4, 6, 8, and 9 are not.
Solution: The problem can be broken into the following tasks:•For number = 2, 3, 4, 5, 6, ..., test whether the number is prime.•Determine whether a given number is prime.•Count the prime numbers.•Print each prime number, and print 10 numbers per line.
PrimeNumberPrimeNumber RunRun
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 105
Introducing Methods
A method is a collection of statements that are grouped together to perform an operation.
public static int max(int num1, int num2) {
int result; if (num1 > num2) result = num1; else result = num2; return result;
}
modifier return value type method name formal parameters
return value
method body
method header
parameter list
Define a method Invoke a method
int z = max(x, y);
actual parameters
(arguments)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 106
Introducing Methods, cont.
• Method signature is the combination of the method name and the parameter list.
• The variables defined in the method header are known as formal parameters.
• When a method is invoked, you pass a value to the parameter. This value is referred to as actual parameter or argument.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 107
Introducing Methods, cont.• A method may return a value. The
returnValueType is the data type of the value the method returns. If the method does not return a value, the returnValueType is the keyword void. For example, the returnValueType in the main method is void.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 108
Calling MethodsListing 5.1 Testing the max method
This program demonstrates calling a method max to return the largest of the int values
TestMaxTestMax Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 109
Calling Methods, cont.
public static void main(String[] args) { int i = 5; int j = 2; int k = max(i, j); System.out.println( "The maximum between " + i + " and " + j + " is " + k); }
public static int max(int num1, int num2) { int result; if (num1 > num2) result = num1; else result = num2; return result; }
pass the value of i pass the value of j
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 110
Reuse Methods from Other Classes
NOTE: One of the benefits of methods is for reuse. The max method can be invoked from any class besides TestMax. If you create a new class Test, you can invoke the max method using ClassName.methodName (e.g., TestMax.max).
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 111
Call Stacks
The main method is invoked.
Space required for the main method k:
j: 2 i: 5
The max method is invoked.
Space required for the max method result: 5
num2: 2 num1: 5
The max method is finished and the return value is sent to k.
The main method is finished.
Stack is empty
Space required for the main method k:
j: 2 i: 5
Space required for the main method k: 5
j: 2 i: 5
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 112
Trace Call Stack
public static void main(String[] args) { int i = 5; int j = 2; int k = max(i, j); System.out.println( "The maximum between " + i + " and " + j + " is " + k); }
public static int max(int num1, int num2) { int result; if (num1 > num2) result = num1; else result = num2; return result; }
Return result and assign it to k
The max method is invoked.
Space required for the max method result: 5
num2: 2 num1: 5
Space required for the main method k:5
j: 2 i: 5
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 113
Pass by Value
Listing 5.2 Testing Pass by value
This program demonstrates passing values to the methods.
TestPassByValueTestPassByValue Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 114
Pass by Value, cont.
The main method is invoked
The values of num1 and num2 are passed to n1 and n2. Executing swap does not affect num1 and num2.
Space required for the main method
num2: 2 num1: 1
The swap method is invoked
Space required for the main method
num2: 2 num1: 1
Space required for the swap method temp:
n2: 2 n1: 1
The swap method is finished
Space required for the main method
num2: 2 num1: 1
The main method is finished
Stack is empty
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 115
Overloading Methods
Listing 5.3 Overloading the max Method
public static double max(double num1, double num2) {
if (num1 > num2) return num1; else return num2;}
TestMethodOverloadingTestMethodOverloading Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 116
Ambiguous Invocation
Sometimes there may be two or more possible matches for an invocation of a method, but the compiler cannot determine the most specific match. This is referred to as ambiguous invocation. Ambiguous invocation is a compilation error.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 117
Ambiguous Invocationpublic class AmbiguousOverloading { public static void main(String[] args) { System.out.println(max(1, 2)); } public static double max(int num1, double num2) { if (num1 > num2) return num1; else return num2; } public static double max(double num1, int num2) { if (num1 > num2) return num1; else return num2; }}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 118
Method Abstraction
You can think of the method body as a black box that contains the detailed implementation for the method.
Method Signature
Method body
Black Box
Optional arguments for Input
Optional return value
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 119
Benefits of Methods
• Write a method once and reuse it anywhere.
• Information hiding. Hide the implementation from the user.
• Reduce complexity.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 120
The Math Class Class constants:
– PI– E
Class methods: – Trigonometric Methods – Exponent Methods– Rounding Methods– min, max, abs, and random Methods
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 121
Trigonometric Methods sin(double a)
cos(double a)
tan(double a)
acos(double a)
asin(double a)
atan(double a)
Radians
toRadians(90)
Examples:
Math.sin(0) returns 0.0
Math.sin(Math.PI / 6) returns 0.5
Math.sin(Math.PI / 2) returns 1.0
Math.cos(0) returns 1.0
Math.cos(Math.PI / 6) returns 0.866
Math.cos(Math.PI / 2) returns 0
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 122
Exponent Methods exp(double a)
Returns e raised to the power of a.
log(double a)
Returns the natural logarithm of a.
log10(double a)
Returns the 10-based logarithm of a.
pow(double a, double b)
Returns a raised to the power of b.
sqrt(double a)
Returns the square root of a.
Examples:
Math.exp(1) returns 2.71
Math.log(2.71) returns 1.0
Math.pow(2, 3) returns 8.0
Math.pow(3, 2) returns 9.0
Math.pow(3.5, 2.5) returns 22.91765
Math.sqrt(4) returns 2.0
Math.sqrt(10.5) returns 3.24
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 123
Rounding Methods double ceil(double x)
x rounded up to its nearest integer. This integer is returned as a double value.
double floor(double x)x is rounded down to its nearest integer. This integer is returned as a
double value.
double rint(double x)x is rounded to its nearest integer. If x is equally close to two integers,
the even one is returned as a double.
int round(float x)Return (int)Math.floor(x+0.5).
long round(double x)Return (long)Math.floor(x+0.5).
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 124
Rounding Methods ExamplesMath.ceil(2.1) returns 3.0 Math.ceil(2.0) returns 2.0Math.ceil(-2.0) returns –2.0Math.ceil(-2.1) returns -2.0Math.floor(2.1) returns 2.0Math.floor(2.0) returns 2.0Math.floor(-2.0) returns –2.0Math.floor(-2.1) returns -3.0Math.rint(2.1) returns 2.0Math.rint(2.0) returns 2.0Math.rint(-2.0) returns –2.0Math.rint(-2.1) returns -2.0Math.rint(2.5) returns 2.0Math.rint(-2.5) returns -2.0Math.round(2.6f) returns 3 Math.round(2.0) returns 2 Math.round(-2.0f) returns -2
Math.round(-2.6) returns -3
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 125
min, max, and abs max(a, b)and min(a,
b)Returns the maximum or minimum of two parameters.
abs(a)Returns the absolute value of the parameter.
random()Returns a random double valuein the range [0.0, 1.0).
Examples:
Math.max(2, 3) returns 3
Math.max(2.5, 3) returns 3.0
Math.min(2.5, 3.6) returns 2.5
Math.abs(-2) returns 2
Math.abs(-2.1) returns 2.1
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 126
The random MethodGenerates a random double value greater than or equal to 0.0 and less than 1.0 (0 <= Math.random() < 1.0).
Examples:
(int)(Math.random() * 10) Returns a random integer
between 0 and 9.
50 + (int)(Math.random() * 50) Returns a random integer between 50 and 99.
In general,
a + Math.random() * b Returns a random number between
a and a + b, excluding a + b.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 127
Stepwise Refinement (Optional)
The concept of method abstraction can be applied to the process of developing programs. When writing a large program, you can use the “divide and conquer” strategy, also known as stepwise refinement, to decompose it into subproblems. The subproblems can be further decomposed into smaller, more manageable problems.
PrintCalendarPrintCalendar Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 128
PrintCalender Case Study Let us use the PrintCalendar example to demonstrate the stepwise refinement approach.
Run
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 129
Design Diagram
printCalendar (main)
readInput printMonth
getStartDay
printMonthTitle printMonthBody
getTotalNumOfDays
getNumOfDaysInMonth
getMonthName
isLeapYear
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 130
Implementation: Top-Down
A Skeleton for printCalendarA Skeleton for printCalendar
Top-down approach is to implement one method in the structure chart at a time from the top to the bottom. Stubs can be used for the methods waiting to be implemented. A stub is a simple but incomplete version of a method. The use of stubs enables you to test invoking the method from a caller. Implement the main method first and then use a stub for the printMonth method. For example, let printMonth display the year and the month in the stub. Thus, your program may begin like this:
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 131
Implementation: Bottom-UpBottom-up approach is to implement one method in the structure chart at a time from the bottom to the top. For each method implemented, write a test program to test it. Both top-down and bottom-up methods are fine. Both approaches implement the methods incrementally and help to isolate programming errors and makes debugging easy. Sometimes, they can be used together.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 132
PackageThere are three reasons for using packages:
1. To avoid naming conflicts. When you develop reusable classes to be shared by other programmers, naming conflicts often occur. To prevent this, put your classes into packages so that they can be referenced through package names.
2. To distribute software conveniently. Packages group related classes so that they can be easily distributed.
3. To protect classes. Packages provide protection so that the protected members of the classes are accessible to the classes in the same package, but not to the external classes.
Optional
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 133
Package-Naming Conventions Packages are hierarchical, and you can have packages within packages. For example, java.lang.Math indicates that Math is a class in the package lang and that lang is a package in the package java. Levels of nesting can be used to ensure the uniqueness of package names.
Choosing a unique name is important because your package may be used on the Internet by other programs. Java designers recommend that you use your Internet domain name in reverse order as a package prefix. Since Internet domain names are unique, this prevents naming conflicts. Suppose you want to create a package named mypackage on a host machine with the Internet domain name prenhall.com. To follow the naming convention, you would name the entire package com.prenhall.mypackage. By convention, package names are all in lowercase.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 134
Package DirectoriesJava expects one-to-one mapping of the package name and the file system directory structure. For the package named com.prenhall.mypackage, you must create a directory, as shown in the figure. In other words, a package is actually a directory that contains the bytecode of the classes.
com.prenhall.mypackage
The com directory does not have to be the root directory. In order for Java to know where your package is in the file system, you must modify the environment variable classpath so that it points to the directory in which your package resides.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 135
Setting classpath Environment The com directory does not have to be the root directory. In order for Java to know where your package is in the file system, you must modify the environment variable classpath so that it points to the directory in which your package resides.
Suppose the com directory is under c:\book. The following line adds c:\book into the classpath:
classpath=.;c:\book;
The period (.) indicating the current directory is always in classpath. The directory c:\book is in classpath so that you can use the package com.prenhall.mypackage in the program.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 136
Putting Classes into Packages Every class in Java belongs to a package. The class is added to the package when it is compiled. All the classes that you have used so far in this book were placed in the current directory (a default package) when the Java source programs were compiled. To put a class in a specific package, you need to add the following line as the first noncomment and nonblank statement in the program:
package packagename;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 137
Listing 5.8 Putting Classes into PackagesProblem This example creates a class named Format and places it in the package com.prenhall.mypackage. The Format class contains the format(number, numOfDecimalDigits) method that returns a new number with the specified number of digits after the decimal point. For example, format(10.3422345, 2) returns 10.34, and format(-0.343434, 3) returns –0.343.
Solution1. Create Format.java as follows and save it into c:\book\com\prenhall\mypackage.
// Format.java: Format number. package com.prenhall.mypackage; public class Format { public static double format( double number, int numOfDecimalDigits) { return Math.round(number * Math.pow(10, numOfDecimalDigits)) / Math.pow(10, numOfDecimalDigits); }}
2. Compile Format.java. Make sure Format.class is in c:\book\com\prenhall\mypackage.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 138
Using Classes from Packages There are two ways to use classes from a package. • One way is to use the fully qualified name of the class. For example, the fully qualified name for JOptionPane is javax.swing.JOptionPane. For Format in the preceding example, it is com.prenhall.mypackage.Format. This is convenient if the class is used a few times in the program. • The other way is to use the import statement. For example, to import all the classes in the javax.swing package, you can use import javax.swing.*;
An import that uses a * is called an import on demand declaration. You can also import a specific class. For example, this statement imports javax.swing.JOptionPane:
import javax.swing.JOptionPane;
The information for the classes in an imported package is not read in at compile time or runtime unless the class is used in the program. The import statement simply tells the compiler where to locate the classes.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2005 Pearson Education, Inc. All rights reserved. 0-13-148952-6 139
Listing 5.9 Using Packages
Problem This example shows a program that uses the Format class in the com.prenhall.mypackage.mypackage package.
Solution1. Create TestFormatClass.java as follows and save it into c:\book.The following code gives the solution to the problem.
// TestFormatClass.java: Demonstrate using the Format classimport com.prenhall.mypackage.Format; public class TestFormatClass { /** Main method */ public static void main(String[] args) { System.out.println(Format.format(10.3422345, 2)); System.out.println(Format.format(-0.343434, 3)); }}