comp 114 foundations of programming instructor: prasun dewan (pr sün divän)
Post on 22-Dec-2015
214 views
TRANSCRIPT
Topics Assumed & Reviewed
• Types– int, double, char, String
• Variables, constants, expressions
• Arrays
• Assignment, conditionals, loops
• Procedures/Functions/Subroutines/Methods
• Parameters/arguments
Hello World
package warmup;public class AHelloWorldGreeter { public static void main (String[] args) { System.out.println ("Hello World"); }}
Array of user-supplied argumentsmain header
directory/library
Main Arguments
package warmup;public class AnArgPrinter { public static void main (String[] args) { System.out.println (args[0]); }}
First argument
args[0]
args[1]
Second argument
...
Main Arguments
user- supples no argument
package warmup;public class AnArgPrinter { public static void main (String[] args) { System.out.println (args[0]); }}
program refers to argument array element
exception!
Safe Arg Printer (edit in class)
package warmup;public class ASafeArgPrinter { public static void main (String[] args) { //args.length gives number of elements in args array.}
Safe Arg Printer
package warmup;public class ASafeArgPrinter { public static void main (String[] args) { if (args.length = = 1)
System.out.println (args[0]); else {
System.out.println("Illegal no of arguments:" + args.length + ". Terminating program");
System.exit(-1); } }}
Compound Statement
if (args.length = = 1) System.out.println (args[0]); else { System.out.println("Illegal no of arguments:" + args.length + ". Terminating program"); System.exit(-1); }
Nested if-elsepublic static char toLetterGrade (int score) {
if (score >= A_CUTOFF) return 'A';else if (score >= B_CUTOFF) return 'B';else if (score >= C_CUTOFF) return 'C';else if (score >= D_CUTOFF) return 'D';else return 'F';}
Nested If-Elseif (score >= A_CUTOFF) return 'A';else
if (score >= B_CUTOFF) return 'B';else
if (score >= C_CUTOFF) return 'C';
else if (score >= D_CUTOFF) return 'D'; else
return 'F';
Printing Multiple Arguments (edit in class)
package warmup;public class AnArgsPrinter {
public static void main(String[] args) {}
}
Printing Multiple Arguments
package warmup;public class AnArgsPrinter {
public static void main(String[] args) {int argNo = 0;while (argNo < args.length) {
System.out.println(args[argNo]);argNo++;
}}
}
char Constants
char {letters, digits, operators ...}
‘a’
‘A‘
‘1’
‘< ‘ ‘’
16 bits
‘ ‘ ‘’’
‘\’’
Escape sequence
‘\n’
newline
‘
‘\’
‘\\’
Ordering Characters
‘’ ‘a’…. ….‘b’ ‘c’ ‘z’ ….
‘’ ‘A’…. ….‘B’ ‘C’ ‘Z’ ….
‘’ ‘0’…. ….‘1’ ‘2’ ‘3’ ….
‘a’ > ‘b’ false
‘B’ > ‘A’ true
‘4’ > ‘0’ true
‘0’ > ‘’ true
‘a’ > ‘A’ ???
‘a’ > ‘0’ ???
Converting between Characters and their Ordinal Numbers
(int) ‘a’ ordinal number of ’a’
(char) 55 character whose ordinal number is 55
(int) ‘’ 0
(char) 0 ‘’
(int) ‘d’ ???
(char) 1 ???
(char) -1
(int) ‘c’ - (int) ‘a’ 2
‘c’ - ‘a’ 2
Implicit cast to wider type
(char) (‘c’ - 2) ‘a’
(char) (‘A’ + 2) ‘C’
(char) (‘C’ - ‘A’ + ‘a’) ‘c’
String constants
String {sequences of characters}
“hello”
“123”
“hello 123”
“a”
variable size
‘a’
“”
“hello\n\n123”
“\” “\\”
Object Type
Accessing String Components
String s = “hello world”;
s[0]
s[1]
...
s.charAt(0) ‘h’
s.charAt(1) ‘e’
s.charAt(-1)
s.charAt(11)
StringIndexBounds exceptiom
index
s.length() 11
“ ”.length() 1
“”.length() 0
Accessing SubString
“hello world”.substring(4,7)
s.charAt(beginIndex) .. s.charAt(endIndex-1)
s.substring(beginIndex, endIndex)
“o w”
“hello world”.substring(4,4) “”
“hello world”.substring(7,4)
StringIndexBounds exceptiom
String Processing
int i = 0; while (i < s.length()) { System.out.println (s.charAt(i)); i++; }
prints each character on separate line
Dissecting a Loop
int i = 0; while (i < s.length()) { System.out.println (s.charAt(i)); i++; }
loop condition
loop body
Finer-grained Dissection
int i = 0; while (i < s.length()) { System.out.println (s.charAt(i)); i++; }
loop condition
real body
Resetting loop variable
initalizing loop variables
for (int i=0; i<s.length(); i++)
System.out.println(s.charAt(i));
Meaning of For Loop
S1; while ( E) { S3; S2; }
for (S1; E; S2)S3
for (; E; S2)
S3
while ( E) { S3; S2; }
for (; E; )S3
while ( E) { S3; }
for (; ; )S3
while ( true) S3;
Scanning
• Scanning image for text.
• Scanning frequencies for radio stations.
• Finding words in a sentence
• Finding identifiers, operators, in a program
Solution (edit in class)
package warmup;public class AnUpperCasePrinter { public static void main(String[] args){ } }
Solutionpackage warmup;public class AnUpperCasePrinter { public static void main(String[] args){
if (args.length != 1) {System.out.println("Illegal number of arguments:" + args.length + ".
Terminating program.");System.exit(-1);
}System.out.println("Upper Case Letters:");int index = 0;while (index < args[0].length()) {
if (isUpperCase(args[0].charAt(index)))System.out.print(args[0].charAt(index));index++;
}}System.out.println();
} public static boolean isUpperCase(char c) {
return (c >= 'A') && (c <= 'Z'); }}
Strings = Char Sequences
J o h n F . K e n n d ye
h e l l o
String {sequences of characters}
1 4 3 l 0
Other Sequences as Predefined Types
100 98 99 100 90
60 40 50
{sequences of integers}
80
JFK FDR
{sequence of Strings}
JC BC RR GB
3.8 3.1
{sequences of doubles}
3.7 3.1 3.6 3.9
IntSequence
DoubleSequence
StringSequence
Other Sequences as Array Types
100 98 99 100 90
60 40 50
{sequences of integers}
80
{sequence of strings}
3.8 3.1
{sequences of doubles}
3.7 3.1 3.6 3.9
int[]
double[]
String[]
JFK FDR JC BC RR GB
Initializing Array Declarations
100 98 99 100 90 80
int[] assignmentScores = {100, 98, 99, 100, 90 80};
3.8 3.1 3.7 3.1 3.6 3.9
double[] gpas = {3.8, 3.1, 3.7, 3.1, 3.6, 3.9};
String[] initials = {“JFK”, “FDR”, “JC”, “BC”, “GW”, “WW”};
JFK FDR JC BC GW WW
assignmentScores
Array Type
Element Type
Array Literal
Array Variable
Array Operations
String[] initials = {“JFK”, “FDR”, “JC”, “BC”, “GW”, “WW”};
JFK FDR JC BC GW WW
initials.length 6
initials[0]
initials[initials.length - 1]
initials[initials.length] ArrayIndexOutOfBoundsException
public named constant
initials[0] = “HT”
HT
initials[initials.length] = “HT” ArrayIndexOutOfBoundsException
Array Instance Size Fixed
Array Types have Variable-Size
100 98 99 100 90
60 40 50
80
int[]
100 98 99 100 90 80
int[] assignmentScores = {100, 98, 99, 100, 99, 80};
assignmentScores
assignmentScores = {60, 40, 50};
assignmentScores60 40 50
Uninitializing Array Declaration
int[] assignmentScores;
assignmentScores
null
assignmentScores = {60, 40, 50};
assignmentScores60 40 50
Variable-Size Collection
static final int MAX_CHARS = 7;static char[] upperCaseLetters = new char[MAX_CHARS];static int numberOfUpperCaseLetters = 0;
Solutionpackage warmup;public class AReverseUpperCasePrinter {
static final int MAX_CHARS = 5;static char[] upperCaseLetters = new char[MAX_CHARS];static int numberOfUpperCaseLetters = 0;public static void main(String[] args){
if (args.length != 1) {System.out.println("Illegal number of arguments:" +
args.length + ". Terminating program.");System.exit(-1);
}int index = 0;System.out.println("Upper Case Letters:");while (index < args[0].length()) {
if (isUpperCase(args[0].charAt(index))) {System.out.print(args[0].charAt(index));storeChar(args[0].charAt(index));
}index++;
}System.out.println();printReverse();
}
Solution (contd.)
public static void storeChar(char c) {if (numberOfUpperCaseLetters == MAX_CHARS) {
System.out.println("Too many upper case letters. Terminating program. ");
System.exit(-1);}upperCaseLetters[numberOfUpperCaseLetters] = c;numberOfUpperCaseLetters++;
}public static void printReverse() {
System.out.println("Upper Case Letters in Reverse:");for (int index =numberOfUpperCaseLetters - 1; index >= 0; index--) {
System.out.print(upperCaseLetters[index]);}
}}