Download int - csns

Document related concepts
no text concepts found
Transcript
Lecture 2: CS201 Review
Michael Hsu
CSULA
CS201 Main Topics

Anatomy of a Java Program

Data types

Methods

static vs instance

Arrays

Multi-dimensional arrays
HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
Creating, Compiling, and Running
Programs
Compiling Java Source Code


"Write once, run anywhere" (WORA)

Remember machine code is platform dependent

Compiler compiles the code, can only run on that platform
The Java Virtual Machine(JVM)

What if we don’t compile for each different platform, but use a virtual machine ,
and compile for that machine instead? Genius!

The Java compiler compiles your program into bytecode

The bytecode can then be run on any JVM on any platform
Eclipse Tutorial

Follow the eclipse setup guide in the resources section on the course website

Key terms:


Workspace

Your working directory

it will contain multiple projects

When you want to move your eclipse files from file explorer, move the entire workspace folder.
Projects

This is where you will put your java files

You can have one workspace for all your courses, and have different projects for each course,
or have separate workspaces for each course and have separate projects for each
assignments

I recommend having a different workspace for each of your courses with separate projects for
each assignment of the course

Makes your life easier
Useful Eclipse Tips

Show Line Numbers:


Ctrl+ SPACE


Auto format and indentation
Ctrl + d


Autocomplete, auto fix
Ctrl + SHIFT + f


Window -> Preferences -> expand General -> expand Editors -> click on Text Editors
-> check show line numbers
Delete entire line
Right click on a variable then click refactor

You can rename your variables and Eclipse will update all the occurrences for you
Anatomy of a Java Program

Class name

Main method

Statements

Statement terminator

Reserved words

Comments

Blocks
Class Name

Every Java Program must have at least one class.

Each class has a name

Use upper camel case by convention

Capitalize the first character of each word

Examples: HelloWorld, WelcomeHome, ThisIsAnExample, Hello
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
The Main Method

A method is a set of code which is referred to by name and can be called
(invoked) at any point in a program simply by utilizing the method's name.

In order to run a class, the class must contain a special method named main.
The program is executed from the main method.

It has to look exactly like this:
public static void main(String[] args)

Remember, computers are stupid
Statement

A statement represents an action or a sequence of actions

The highlighted statement writes Hello World to standard output:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}

Notice the statement ends with a semicolon:

Every statement in Java ends with a semicolon(;).
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 HelloWorld class, it understands that the word
after class is the name for the class.

In the example below, the reserved words are highlighted in red
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
Blocks

A pair of braces ({ }) in a program forms a block that groups components of a
program:
public class Test {
public static void main(String[] args) {
System.out.println("Welcome to Java!");
}
}
Class block
Method block
Special Symbols
Character Name
{}
()
[]
//
" "
;
Description
Opening and closing
braces
Opening and closing
parentheses
Opening and closing
brackets
Double slashes
Denotes a block to enclose statements.
Opening and closing
quotation marks
Semicolon
Enclosing a string (i.e., sequence of characters).
Used with methods.
Denotes an array.
Precedes a comment line.
Marks the end of a statement.
Escape Sequences
Escape Sequence
Description
\t
Insert a tab in the text at this point.
\b
Insert a backspace in the text at this point.
\n
Insert a newline in the text at this point.
\r
Insert a carriage return in the text at this point.
\f
Insert a formfeed in the text at this point.
\'
Insert a single quote character in the text at this point.
\"
Insert a double quote character in the text at this point.
\\
Insert a backslash character in the text at this point.
Programming Conventions

Why follow conventions?

Won’t make my eyes bleed

I look at all your assignments

I will take off points if you don’t.

Easier to read and maintain

Lots of APIs and frameworks rely on proper naming conventions
Comments Example
/* CS201
* Spring 2015
* Example 1
*/
public class HelloWorld {
//Write Hello, World to standard output
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
Naming Conventions

Choose meaningful and descriptive names.


Length of name is no longer an issue, since most editors support autocomplete
Class names:

Upper Camel Case

Capitalize the first letter of each word in the name. For example, the class name
ComputeExpression.
Proper Indentation and Spacing

The machine doesn’t care whether you indent it or not. In fact, compressing
everything to one line saves a lot of space

Indentation and spacing is used so your code is readable.

Use Indentation to show different levels of the code block/structure

Generally two spaces per level, or you can use tabs

In fact, languages like python make it mandatory, or it won’t even compile

Use a plugin for your editor to automate the process.

I’m not too picky on the style, as long as it’s readable
Readable Code
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
Unreadable Code
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World");
}
}
Conventions Grading Criteria

If you don’t follow conventions, I will take off up till 20% of your lab grade
depending on the offense.
Programming errors

Syntax Errors


Runtime Errors


Detected by the compiler, won’t compile at all
Causes the program to abort
Logic Errors

Produces incorrect result

Most difficult to debug
Syntax Error
public class Test {
publi static void main(String[] args) {
System.out.println("lol, you can't spell");
}
}
What is wrong with this code?
Runtime Errors
public class ShowRuntimeErrors {
public static void main(String[] args) {
System.out.println(1 / 0);
}
}
What is wrong with this code?
Logic Errors
public class CalculateAreaOfTriangle {
public static void main(String[] args) {
System.out.println("Base is 20, height is 10");
System.out.println("Area is: ");
System.out.println(20 + 10);
}
}
What is wrong with this code?
Reading Error Messages

Pay attention to the line number

Understand what type of error it is

Read your own code and find the problem.


At this stage, it is most likely a problem with your code or your environment setup,
Java is not the problem.
More Info

http://www.dummies.com/how-to/content/tackling-error-messages-in-javaprogramming.html
Variables and Constants

One of the basic building blocks of a program

Similar to variables and constants in math

Variables/constants, in the general sense, allocate memory for specific data
you’re using in a program

Example:

double radius = 0;

Allocates space to store a double, names it radius (think memory address), then
stores the value 0 at the memory address

We call the name of the variable an identifier
Declaring Variables
In Java, you must declare variables before you use them
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;
29
Assignment and Comparison
Statements
Note: a SINGLE equal sign is assignment in Java.
To compare variables, use ==
x = 1;
// Assign 1 to x;
radius = 1.0;
// Assign 1.0 to radius;
a = 'A';
// Assign 'A' to a;
1 == 1
// Is one equal to one?
30
Declaring and Initializing in One Step
int x = 1;
double d = 1.4;
31
Constants
final datatype CONSTANTNAME = VALUE;
final double PI = 3.14159;
final int SIZE = 3;
32
Naming Convention For
Variables/Constants

For variables, use lowerCamelCase

First word starts with lower case, the rest upper case

Choose meaningful, descriptive names, usually nouns.

Capitalize all letters in constants, and use underscores to connect words. For
example, the constant PI and MAX_VALUE

More examples of constant:


HEIGHT_OF_MICHAEL

ABOGADRO_CONSTANT
Again, if you don’t pick reasonable names/follow naming conventions, I will
take off points
Numerical Data Types
Name
Range
Storage Size
byte
–27 to 27 – 1 (-128 to 127)
8-bit signed
short
–215 to 215 – 1 (-32768 to 32767)
16-bit signed
int
–231 to 231 – 1 (-2147483648 to 2147483647)
32-bit signed
long
–263 to 263 – 1
(i.e., -9223372036854775808 to 9223372036854775807)
64-bit signed
float
Negative range:
-3.4028235E+38 to -1.4E-45
Positive range:
1.4E-45 to 3.4028235E+38
32-bit IEEE 754
double
Negative range:
-1.7976931348623157E+308 to -4.9E-324
64-bit IEEE 754
Positive range:
4.9E-324 to 1.7976931348623157E+308
Floating Point Types

Include the types float and double

Uses scientific Notation in binary to store data

IEEE 754

These types store values with limited precision, essentially rounding to the
closest value they can hold

More Info

http://introcs.cs.princeton.edu/java/91float/
35
Floating Point Types Rounding Errors

Floating point arithmetic is not exact, as some numbers require infinite
amount of digits to be represented (like 1/10) in binary.

Do not rely on floating point types for accurate calculations

What if we’re calculating money? Use BigDecimal

Do not do test for equality between floating point nubmers
More Data Types


boolean

Either true or false

Comparisons evaluate to boolean values

100 > 2 true

2 == 2 true
char

Single character

Set literal value using single quotes:


char exampleChar = ‘B’
You can also use ASCII values:

char exampleChar = 66

Since the variable is of chart datatype, java knows that you are using the ASCII value to refer to the
character ‘B’

As a result, ‘b’ is different from ‘B’ since they have different ASCII values.
Primitive Data Types

Predefined by the language

basic types that build up other types

In later classes, you will use primitives to create your own data types

Only the values are copied when you reassign primitive type variables to each
other


More on this later
Includes all the numeric data types mentioned in previous slides, plus boolean and
char.
Strings

A sequence of zero or more characters

You already used them in the System.out.println statements

Set values using double quotes

The ‘S’ is capitalized

It is NOT a primitive type, but a class

Will be covered later

String helloWorld = “Hello, World”;

“”
null String/empty String
Using variables in String literals

To use variables in String literals, use the + operator:
int num1 = 2;
int num2 = 3;
System.out.println(num1+ " divided by "+num2+" in Java is " + 2/3);
Math Operations


Most of them are just like how you do it in math
int x = 1;
// declared an integer variable x, sets x to be 1

x = x + 1; // adds 1 to x

x = x * 2;

X = 2/3

x = 100.0/9.2; //Floating point division

Integer division: when all variables in the calculation are numeric nonfloating point types, the decimal portion is dropped.

// multiplies x by 2
//integer division
Example: 1/2 == 0, 20/6 == 3, 14/200 == 0
The modulus operator %

%




Performs integer division, and returns the remainder.
x =7%3

Divide 7 by 3, find the remainder, then assign value of the remainder to x

In this case x is 1
a%b

If a > b, then it returns the remainder of the division

If a < b, then it returns a

If a == b, then it returns 0
Testing even and odd

If x is even, then x % 2 == 0 evaluates to true

If x is odd, then x % 2 == 1, or you can use x % 2 != 0
Type Casting

Converting between data types
Implicit casting
double d = 3; (type widening)
Explicit casting
int i = (int)3.0; (type narrowing)
int i = (int)3.9; (Fraction part is truncated)
char i = (char) 65; (ASCII code to char)
What is wrong?
int x = 5 / 2.0;
range increases
byte, short, int, long, float, double
43
Augmented Assignment Operators
44
Increment and
Decrement Operators
45
Increment and
Decrement Operators, cont.
int i = 10;
int newNum = 10 * i++;
Same effect as
int i = 10;
int newNum = 10 * (++i);
int newNum = 10 * i;
i = i + 1;
Same effect as
i = i + 1;
int newNum = 10 * i;
46
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--;
47
Expressions, Literals, and Statements

Literals:

Source code representation of a fixed value

Examples:


Expression:

Made up of variables, operators, that evaluates to a value

Java subexpressions are evaluated left to right

Examples:





1, 2, 0, -200, true, false, ‘A’
2*3*4
2%3
i+++I
K =10
Statements: sentences with semi-colon at the end
Source: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html
Relational Operators
Java
Operator
Mathematics
Symbol
Name
Example
(radius is 5)
Result
<
<
less than
radius < 0
false
<=
≤
less than or equal to
radius <= 0
false
>
>
greater than
radius > 0
true
>=
≥
greater than or equal to
radius >= 0
true
==
=
equal to
radius == 0
false
!=
≠
not equal to
radius != 0
true
49
Control Flow Statements

Your source code is usually executed from top to bottom



In the order that they appear
Control Flow Statements

Breaks up your execution order

Conditionally execute particular blocks of code
Some categories:

Decision making


Looping


If-then, if-then-else, switch
for, while, do-while
Branching

Break, continue return
Source: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html
if-then statements

Most basic of all control flow statements
A programmer's wife tells her: "Go to the store and get a loaf of bread. If they have
eggs, get a dozen."
The programmer comes home with 12 loaves of bread.

Tells your program to execute a certain section of code only if a particular test
evaluates to true

Syntax:

if(TEST){
//Do stuff in here is TEST evaluates to true
}
if-then example

Example:

boolean isThisClassCS201Section3 = true;

if(isThisClassCS201Section3){
System.out.println("My dog lectures better than the instructor");
System.out.println("JK, please don't give me a bad grade :)");

}

Eclipse tells you if the code block is “dead code”, never can be reached
if-then-else Statement

Provides a secondary path of execution when an “if” clause evaluates to false.

Example:

boolean isThisClassCS201Section3 = true;
if (isThisClassCS201Section3) {
System.out.println("My dog lectures better than the instructor");
} else {
System.out.println("I'm not gonna joke about the instructor cause he/she probably
can't take the joke");
}

You can also omit braces for the else clause if there is just one statement
if-else if - else

You can use else if, with or without a final else:
if(condition 1) {
// statements to execute if condition 1 is true
}
else if(condition 2) {
// statements to execute if condition 1 is false but condition 2 is true
}
// can use any number of else if blocks
else {
// statements to execute if condition none of the conditions are true
}
Nesting if-else statements
if(condition 1) {
// statements execute if condition 1 is true
if (condition 2){
// statements execute if condition 1 and condition 2 are both true
}
else {
// statements execute if condition 1 is true but condition 2 is false
}
}
else{
// statements execute if condition 1 is false
}
Common Errors

Adding a semicolon at the end of an if clause is a common mistake.
if (radius >= 0);
{
Wrong
area = radius*radius*PI;
System.out.println(
"The area for the circle of radius " +
radius + " is " + area);
}

Semi-colon marks the end of the statement, ending the if-statement. so the code block will
always execute.

This mistake is hard to find, because it is not a compilation error or a runtime error, it is a
logic error.

This error often occurs when you use the next-line block style.
56
A Note on Naming Conventions for
Boolean variables

The identifier of a boolean variable should be a phrase/sentence that is
either true or false

Examples:

isNumberEven

isOver9000

hasBeenNoticedBySenpai
Logical Operators
Operator
Name
Description
!
not
logical negation
&&
and
logical conjunction
||
or
logical disjunction
^
exclusive or
logical exclusion
58
Truth Table for Operator !
p
!p
Example (assume age = 24, weight = 140)
true false !(age > 18) is false, because (age > 18) is true.
false true
!(weight == 150)
is true, because (weight == 150) is false.
59
Truth Table for Operator &&
p1
p2
p1 && p2 Example (assume age = 24, weight = 140)
false
false false
(age <= 18) && (weight < 140) is false, because (age >
18) and (weight <= 140) are both false.
false
true
false
true
false
false
(age > 18) && (weight > 140) is false, because (weight
> 140) is false.
true
true
true
(age > 18) && (weight >= 140) is true, because both
(age > 18) and (weight >= 140) are true.
60
Truth Table for Operator ||
p1
p2
p1 || p2 Example (assume age = 24, weihgt = 140)
false false false
false true
true
(age > 34) || (weight <= 140) is true, because (age > 34)
is false, but (weight <= 140) is true.
true
false
true
(age > 14) || (weight >= 150) is false, because
(age > 14) is true.
true
true
true
61
Truth Table for Operator ^
p1
p2
p1 ^ p2 Example (assume age = 24, weight = 140)
false
false
false
(age > 34) ^ (weight > 140) is true, because (age > 34) is false
and (weight > 140) is false.
false
true
true
(age > 34) ^ (weight >= 140) is true, because (age > 34) is false
but (weight >= 140) is true.
true
false
true
(age > 14) ^ (weight > 140) is true, because (age > 14) is
true and (weight > 140) is false.
true
true
false
62
switch Statements
switch (status) {
case 0: compute taxes for single filers;
break;
case 1: compute taxes for married file jointly;
break;
case 2: compute taxes for married file separately;
break;
case 3: compute taxes for head of household;
break;
default: System.out.println("Errors: invalid status");
System.exit(1);
}
63
switch Statement Rules
The switch-expression
must yield a value of char,
byte, short, or int type and
must always be enclosed in
parentheses.
The value1, ..., and valueN must
have the same data type as the
value of the switch-expression.
The resulting statements in the
case statement are executed when
the value in the case statement
matches the value of the switchexpression. Note that value1, ...,
and valueN are constant
expressions, meaning that they
cannot contain variables in the
expression, such as 1 + x.
switch (switch-expression) {
case value1: statement(s)1;
break;
case value2: statement(s)2;
break;
…
case valueN: statement(s)N;
break;
default: statement(s)-for-default;
}
64
switch Statement Rules
The keyword break is optional,
but it should be used at the end
of each case in order to
terminate the remainder of the
switch statement. If the break
statement is not present, the
next case statement will be
executed.
The default case, which is
optional, can be used to perform
actions when none of the
specified cases matches the
switch-expression.
switch (switch-expression) {
case value1: statement(s)1;
break;
case value2: statement(s)2;
break;
…
case valueN: statement(s)N;
break;
default: statement(s)-for-default;
}
When the value in a case statement matches the value
of the switch-expression, the statements starting from
this case are executed until either a break statement or
the end of the switch statement is reached.
65
Conditional Expressions
if (x > 0)
y=1
else
y = -1;
is equivalent to
y = (x > 0) ? 1 : -1;
(boolean-expression) ? expression1 : expression2
66
java.util.Scanner

Lets you get input from keyboard (System.in) to make the programs more fun

Couple of things to notice


You have to import the scanner class because it is not under java.lang

You don’t need to import java.lang.Math cause the compiler does it for you

Import before you declare the class
Import statement:


import java.util.Scanner;
Difference between classes, object, and instance

java.util.Scanner is a class

A class is like a blueprint/template. To make copies of it that do different things, we need
to create an object

An object is an instance of its class
How to Use java.util.Scanner
1.
2.
import java.util.Scanner;
Create an instance of the Scanner class, a Scanner object:
Scanner scanner = new Scanner(System.in);
//We set up Scanner object with the name “scanner”
3. Do Stuff with it
4. Close it to free up resources:
scanner.close();
Scanner Input Methods

https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html

Since most of the methods are instance methods, you have to create the
scanner object before you can use it

The main method is not an instance method because of the keyword “static”

For example, methods in String and Math are static methods

You can read an entire line, a String, a double, an int, etc.

Read the documentation and lecture code examples to learn more about
Scanner methods
Useful Scanner Methods

nextInt(): reads the next token as an int

next(): reads the next token as a string

nextLine(): reads the entire line, consumes end of line(carriage return)

nextDouble(): reads the next token as a double

nextBoolean(): reads in the next token as a boolean
What Exactly Are Methods?

We talked about the main method, we also used methods from Scanner

Methods:

A block of code that can be called using the identifier

It can do things without any input/output, like System.out.println()

You can pass in parameters as inputs

You can also specify the method return type, and return a value of that type using
the return keyword.
Example Method:
Return type
Method
Name/Identifier
Parameters
public double calculateTriangleArea(double base, double height) {
double area = base * height / 2;
return area;
}
Return a value with type
matching the return type
specified
Another Example Method:
Return type is void, so not
returning anything
public void calculateTriangleArea(double base, double height) {
System.out.println("I'm just printing out stuff");
}
Using Methods

Recall the differences between static and instance methods:


Static methods belong to the class

Has the “static” keyword between “public” and the return type

Using static methods:

CLASSNAME.STATIC_METHOD_NAME()

Example: Integer.parseInt(“23456”);
Instance methods belong to the objects that are instances of the class

Does not have the “static” keyword

Using instance methods:

Create an object first

OBJECT_NAME.METHOD_NAME()

Example: scanner.nextInt()
java.lang.Math

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

Unlike java.util.Scanner, you don’t need to import it cause it’s under
java.lang

Class constants:


PI

E
Class methods:

Trigonometric Methods

Exponent Methods

Rounding Methods

min, max, abs, and random Methods
The random Method (Not secure for
Cryptography)
Generates 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.
76
Characters: Comparing and Testing
Characters
if (ch >= 'A' && ch <= 'Z')
System.out.println(ch + " is an uppercase letter");
else if (ch >= 'a' && ch <= 'z')
System.out.println(ch + " is a lowercase letter");
else if (ch >= '0' && ch <= '9')
System.out.println(ch + " is a numeric character");
77
Static Methods in the Character
Class
Method
Description
isDigit(ch)
Returns true if the specified character is a digit.
isLetter(ch)
Returns true if the specified character is a letter.
isLetterOfDigit(ch)
Returns true if the specified character is a letter or digit.
isLowerCase(ch)
Returns true if the specified character is a lowercase letter.
isUpperCase(ch)
Returns true if the specified character is an uppercase letter.
toLowerCase(ch)
Returns the lowercase of the specified character.
toUpperCase(ch)
Returns the uppercase of the specified character.
78
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 not a primitive type like int, char, or double, but
a reference type like Scanner. You have to create a String
object before using it.
79
Different Ways of Creating Strings

String newString = new String(“This is a String literal”);

Shorthand:

String newString = “This is a String literal”;

String literals are interned, meaning the compiler caches the value and reuses it
Revisiting Variables and Objects

String testString = “This class is boring”;

Because String is not a primitive like int and double, testString is an object of
the class String, just like how Scanner works.

testString is a reference that points to a String object with the value “This
class is boring”


Remember, references are like memory addresses
Strings are immutable:

You cannot change a value of an existing String object. You can reassign the
variable/reference to a new String object, but the original one is still there.

More example in later slide
Null

A null value denotes that the variable points to nothing.
Variables whose data type is a reference type, like String or
Scanner, may exist without having any value:
String s = null;
//null is not the same as empty String
String s =“”;

A variable whose type is a primitive data type will be null if no
value is set, but can't be set to null
int x;
// ok
int x = null; //syntax error
82
Instance Methods for String Objects
Method
Description
length()
charAt(index)
Returns the number of characters in this string.
concat(s1)
toUpperCase()
Returns a new string that concatenates this string with string s1.
toLowerCase()
trim()
Returns a new string with all letters in lowercase.
Returns the character at the specified index from this string.
Returns a new string with all letters in uppercase.
Returns a new string with whitespace characters trimmed on both sides.
8
3
Simple Methods for String Objects

Strings are objects in Java. The methods in the preceding table can only be
invoked from a specific string instance.

For this reason, these methods are called instance methods. A non-instance
method is called a static method. A static method can be invoked without
using an object. All the methods defined in the Math class are static methods.
They are not tied to a specific object instance. The syntax to invoke an
instance method is
referenceVariable.methodName(arguments).
8
4
Getting String Length
String message = "Welcome to Java";
System.out.println("The length of " + message + " is "
+ message.length());
85
Getting Characters from a String
String message = "Welcome to Java";
System.out.println("The first character in message is "
+ message.charAt(0));
86
Converting Strings
"Welcome".toLowerCase() returns a new string,
welcome.
"Welcome".toUpperCase() returns a new string,
WELCOME.
" Welcome ".trim() returns a new string, Welcome.
87
String Concatenation
String s3 = s1.concat(s2); or String s3 = s1 + s2;
// Three strings are concatenated
String message = "Welcome " + "to " + "Java";
// String Chapter is concatenated with number 2
String s = "Chapter" + 2; // s becomes Chapter2
// String Supplement is concatenated with character
B
String s1 = "Supplement" + 'B'; // s1 becomes
SupplementB
88
Reading a String from the Console
Scanner input = new Scanner(System.in);
System.out.print("Enter three words separated by
spaces: ");
String s1 = input.next();
String s2 = input.next();
String s3 = input.next();
System.out.println("s1 is " + s1);
System.out.println("s2 is " + s2);
System.out.println("s3 is " + s3);
89
Comparing Strings
• When comparing two objects, if you use the ==, you are essentially
comparing whether the two variables point to the same object. You are not
actually comparing their actual values.
• To compare objects based on factors other than what they are pointing to,
use compareTo
Method
Description
equals(s1)
Returns true if this string is equal to string s1 .
equalsIgnoreCase(s1)
Returns true if this string is equal to string s1 ; it is case insensitive.
compareTo(s1)
Returns an integer greater than 0 , equal to 0 , or less than 0 to indicate whether
this string is greater than, equal to, or less than s1 .
compareToIgnoreCase(s1) Same as compareTo except that the comparison is case insensitive.
Returns true if this string starts with the specified prefix.
startsWith(prefix)
Returns true if this string ends with the specified suffix.
endsWith(suffix)
90
Obtaining Substrings
Method
Description
substring(beginIndex)
Returns this string’s substring that begins with the character at the specified
beginIndex and extends to the end of the string, as shown in Figure 4.2.
substring(beginIndex,
endIndex)
Returns this string’s substring that begins at the specified beginIndex and
extends to the character at index endIndex – 1, as shown in Figure 9.6.
Note that the character at endIndex is not part of the substring.
91
Finding a Character or a Substring
in a String
Method
Description
indexOf(ch)
Returns the index of the first occurrence of ch in the string. Returns -1 if not
matched.
indexOf(ch, fromIndex)
Returns the index of the first occurrence of ch after fromIndex in the string.
Returns -1 if not matched.
indexOf(s)
Returns the index of the first occurrence of string s in this string. Returns -1 if
not matched.
indexOf(s, fromIndex)
Returns the index of the first occurrence of string s in this string after
fromIndex. Returns -1 if not matched.
lastIndexOf(ch)
Returns the index of the last occurrence of ch in the string. Returns -1 if not
matched.
lastIndexOf(ch,
fromIndex)
lastIndexOf(s)
Returns the index of the last occurrence of ch before fromIndex in this
string. Returns -1 if not matched.
lastIndexOf(s,
fromIndex)
Returns the index of the last occurrence of string s before fromIndex.
Returns -1 if not matched.
Returns the index of the last occurrence of string s. Returns -1 if not matched.
92
Finding a Character or a Substring
in a String
int k = s.indexOf(' ');
String firstName = s.substring(0, k);
String lastName = s.substring(k + 1);
93
Conversion between Strings and
Numbers
int intValue = Integer.parseInt(intString);
double doubleValue = Double.parseDouble(doubleString);
String s = number + "";
94
String Immutability Demonstration
String s = "example text";
s.substring(0, 4);
/*
* still printing "example text", substring
* returns a new string instead of modifying the
* existing one
*/
System.out.println(s);
String a = s.substring(0, 4);
System.out.println(a); // prints "example"
Loops

Control flow statements

While-loops

Do-while loops

For-loops
while Loop Flow Chart
while (loop-continuation-condition) {
// loop-body;
int count = 0;
while (count < 100) {
System.out.println("Welcome to Java!");
Statement(s);
}
count++;
}
97
do-while Loop
• Runs the Loop body at least once
• Useful for asking user input
do {
// Loop body;
Statement(s);
} while (loop-continuation-condition);
98
for Loops
for (initial-action; loopcontinuation-condition; actionafter-each-iteration) {
// loop body;
Statement(s);
}
int i;
for (i = 0; i < 100; i++) {
System.out.println(
"Welcome to Java!");
}
99
Caution
Adding a semicolon at the end of the for clause before
the loop body is a common mistake, as shown below:
Logic
Error
for (int i=0; i<10; i++);
{
System.out.println("i is " + i);
}
100
Which Loop to Use?
The three forms of loop statements, while, do-while, and for, are
expressively equivalent; that is, you can write a loop in any of these
three forms. For example, a while loop in (a) in the following figure
can always be converted into the following for loop in (b):
while (loop-continuation-condition) {
// Loop body
}
Equivalent
for ( ; loop-continuation-condition; ) {
// Loop body
}
(a)
(b)
A for loop in (a) in the following figure can generally be converted into the
following while loop in (b) except in certain special cases (see Review Question
3.19 for one of them):
for (initial-action;
loop-continuation-condition;
action-after-each-iteration) {
// Loop body;
}
(a)
Equivalent
initial-action;
while (loop-continuation-condition) {
// Loop body;
action-after-each-iteration;
}
(b)
101
Recommendations

Use the one that is most intuitive and comfortable for you.

In general, a for loop may be used if the number of repetitions is known, as,
for example, when you need to print a message 100 times.

A while loop may be used if the number of repetitions is not known, as in the
case of reading the numbers until the input is 0.

A do-while loop can be used to replace a while loop if the loop body has to be
executed before testing the continuation condition.
102
break
public class TestBreak {
public static void main(String[] args) {
int sum = 0;
int number = 0;
while (number < 20) {
number++;
sum += number;
if (sum >= 100)
break;
}
System.out.println("The number is " + number);
System.out.println("The sum is " + sum);
}
}
103
continue
public class TestContinue {
public static void main(String[] args) {
int sum = 0;
int number = 0;
while (number < 20) {
number++;
if (number == 10 || number == 11)
continue;
sum += number;
}
System.out.println("The sum is " + sum);
}
}
104
Introducing Arrays
Array is a data structure that represents a collection of the
same types of data.
105
Declaring Array Variables

datatype[] arrayRefVar;
Example:
double[] myList;

datatype arrayRefVar[]; // This style is
allowed, but not preferred
Example:
double myList[];
106
Creating Arrays
arrayRefVar = new datatype[arraySize];
Example:
myList = new double[10];
myList[0] references the first element in the array.
myList[9] references the last element in the array.
107
Declaring and Creating
in One Step

datatype[] arrayRefVar = new
datatype[arraySize];
double[] myList = new double[10];

datatype arrayRefVar[] = new
datatype[arraySize];
double myList[] = new double[10];
108
The Length of an Array
Once an array is created, its size is fixed. It
cannot be changed. You can find its size using
arrayRefVar.length
For example,
myList.length returns 10
109
Default Values
When an array is created, its elements are
assigned the default value of
0 for the numeric primitive data types,
'\u0000' for char types, and
false for boolean types.
110
Indexed Variables
 The
array elements are accessed through the
index.
 The
array indices are 0-based, i.e., it starts from 0
to arrayRefVar.length-1.
 Each
element in the array is represented using the
following syntax, known as an indexed variable:
arrayRefVar[index];
111
Using Indexed Variables
After an array is created, an indexed
variable can be used in the same way as a
regular variable. For example, the
following code adds the value in myList[0]
and myList[1] to myList[2].
myList[2] = myList[0] + myList[1];
112
Array Initializers
 Declaring,
creating, initializing in one
step:
double[] myList = {1.9, 2.9, 3.4, 3.5};
This shorthand syntax must be in one
statement.
113
Declaring, creating, initializing
Using the Shorthand Notation
double[] myList = {1.9, 2.9, 3.4, 3.5};
This shorthand notation is equivalent to the following statements:
double[] myList = new double[4];
myList[0] = 1.9;
myList[1] = 2.9;
myList[2] = 3.4;
myList[3] = 3.5;
114
Copying Arrays
Often, in a program, you need to duplicate an array or a part of
an array. In such cases you could attempt to use the assignment
statement (=), as follows:
list2 = list1;
115
Copying Arrays
Using a loop:
int[] sourceArray = {2, 3, 1, 5, 10};
int[] targetArray = new
int[sourceArray.length];
for (int i = 0; i < sourceArrays.length; i++)
targetArray[i] = sourceArray[i];
116
The arraycopy Utility
arraycopy(sourceArray, src_pos,
targetArray, tar_pos, length);
Example:
System.arraycopy(sourceArray, 0,
targetArray, 0, sourceArray.length);
117
Passing Arrays to Methods
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
Invoke the method
int[] list = {3, 1, 2, 6, 4, 2};
printArray(list);
Invoke the method
printArray(new int[]{3, 1, 2, 6, 4, 2});
Anonymous array
118
Anonymous Array
The statement
printArray(new int[]{3, 1, 2, 6, 4, 2});
creates an array using the following syntax:
new dataType[]{literal0, literal1, ..., literalk};
There is no explicit reference variable for the
array. Such array is called an anonymous
array.
119
Pass By Value
Java uses pass by value to pass arguments to a method.
There are important differences between passing a value
of variables of primitive data types and passing arrays.
For a parameter of a primitive type value, the actual
value is passed. Changing the value of the local
parameter inside the method does not affect the value
of the variable outside the method.

For a parameter of an array type, the value of the
parameter contains a reference to an array; this
reference is passed to the method. Any changes to the
array that occur inside the method body will affect the
original array that was passed as the argument.

120
The Arrays.sort Method
Since sorting is frequently used in programming, Java provides several
overloaded sort methods for sorting an array of int, double, char, short,
long, and float in the java.util.Arrays class. For example, the following
code sorts an array of numbers and an array of characters.
double[] numbers = {6.0, 4.4, 1.9, 2.9, 3.4, 3.5};
java.util.Arrays.sort(numbers);
char[] chars = {'a', 'A', '4', 'F', 'D', 'P'};
java.util.Arrays.sort(chars);
Java 8 now provides Arrays.parallelSort(list) that utilizes the multicore
for fast sorting.
121
Command-Line Parameters
class TestMain {
public static void main(String[] args) {
...
}
}
java TestMain arg0 arg1 arg2 ... argn
122
Processing
Command-Line Parameters
In the main method, get the arguments
from args[0], args[1], ..., args[n],
which corresponds to arg0, arg1, ...,
argn in the command line.
123
Declare/Create Two-dimensional Arrays
// Declare array ref var
dataType[][] refVar;
// Create array and assign its reference to variable
refVar = new dataType[10][10];
// Combine declaration and creation in one statement
dataType[][] refVar = new dataType[10][10];
// Alternative syntax
dataType refVar[][] = new dataType[10][10];
124
Declaring Variables of Twodimensional Arrays and Creating Twodimensional Arrays
int[][] matrix = new int[10][10];
or
int matrix[][] = new int[10][10];
matrix[0][0] = 3;
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++)
matrix[i][j] = (int)(Math.random() * 1000);
double[][] x;
125
Two-dimensional Array Illustration
matrix.length? 5
array.length? 4
matrix[0].length? 5
array[0].length? 3
126
Declaring, Creating, and Initializing Using
Shorthand Notations
You can also use an array initializer to declare, create
and initialize a two-dimensional array. For example,
int[][] array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12}
};
Same as
int[][] array = new int[4][3];
array[0][0] = 1; array[0][1] = 2; array[0][2] = 3;
array[1][0] = 4; array[1][1] = 5; array[1][2] = 6;
array[2][0] = 7; array[2][1] = 8; array[2][2] = 9;
array[3][0] = 10; array[3][1] = 11; array[3][2] = 12;
127
Lengths of Two-dimensional Arrays
int[][] x = new int[3][4];
128
Lengths of Two-dimensional Arrays, cont.
int[][] array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12}
};
array.length
array[0].length
array[1].length
array[2].length
array[3].length
array[4].length
ArrayIndexOutOfBoundsException
129
Multidimensional Arrays
Occasionally, you will need to represent n-dimensional data structures. In Java,
you can create n-dimensional arrays for any integer n.
The way to declare two-dimensional array variables and create two-dimensional
arrays can be generalized to declare n-dimensional array variables and create ndimensional arrays for n >= 3.
130
Multidimensional Arrays
double[][][] scores = {
{{7.5, 20.5}, {9.0, 22.5}, {15, 33.5}, {13, 21.5}, {15, 2.5}},
{{4.5,
{{6.5,
{{6.5,
{{8.5,
{{9.5,
21.5},
30.5},
23.5},
26.5},
20.5},
Which student
{9.0,
{9.4,
{9.4,
{9.4,
{9.4,
22.5},
10.5},
32.5},
52.5},
42.5},
{15,
{11,
{13,
{13,
{13,
34.5},
33.5},
34.5},
36.5},
31.5},
Which exam
scores[ i ] [ j ] [ k ]
{12,
{11,
{11,
{13,
{12,
20.5},
23.5},
20.5},
24.5},
20.5},
{14,
{10,
{16,
{16,
{16,
9.5}},
2.5}},
7.5}},
2.5}},
6.5}}};
Multiple-choice or essay
131