Download presentation
Presentation is loading. Please wait.
1
Java Types float, double long, int, short byte char boolean Objects Objects are created by : Declaring a reference and calling a constructor. Basic types are created by: Declaring a variable. Short Summary Short Summary
2
Tirgul no. 5 b Topics covered: Memory – sharing, aliasingMemory – sharing, aliasing Complex class exampleComplex class example Arrays in javaArrays in java Command line arguments in javaCommand line arguments in java
3
Summary (cont.) A java program A java program is a set of objects, where at least one of the objects has a method called ‘main’. Running a program means executing the commands which appear in the ‘main’ method. The ‘main’ method is usually comprised of calls to constructors, creating a set of objects and then sending them messages. Object1 ObjectN Object0 : has a ‘main’ method Basic Type1 Basic TypeN
4
Keyword Summary (cont.) public - method : any method/object has access to this method. field: DO NOT CREATE FIELDS WITH PUBLIC ACCESS, the only place where this is acceptable is if the field is final. private - method : only other methods inside this class may use this method. field: this is the common access specifier for fields and is most likely to be acomponied with public methods that allow supervised access to it.
5
Keyword Summary (cont.) final - method : --- field, local variable: this specifier means that once this field/variable is given a value there is no way to change it (this is why fields that have this specifier may sometimes be declared as public). return - method : if the keyword return is followed by a variable/value this value is returned as a result. Return without any following variable means to exit the method.
6
Memory (to share or not to share) Date d1,d2; d1= new Date(1,1,1999); d2 = new Date(1,1,1999); d1 1,1,1999 d2 1,1,1999 Date d1,d2; d1= new Date(1,1,1999); d2 = d1; d1 1,1,1999 d2
7
Memory (cont.) Date d1,d2; d1= new Date(1,1,1999); d2 = new Date(1,1,1999); if(d1 == d2) System.out.println(“same date”); Date d1,d2; d1= new Date(1,1,1999); d2 = d1; if(d1 == d2) System.out.println(“same date”); Which program prints “same date” ? Why? Is this what we really want?
8
Class Complex Example public class Complex { private double real; private double real; private double imaginary; private double imaginary; public Complex(double real,double imaginary) { public Complex(double real,double imaginary) { this.real = real; this.real = real; this.imaginary = imaginary; this.imaginary = imaginary; } public Complex(Complex other) { public Complex(Complex other) { this.real = other.real; this.real = other.real; this.imaginary = other.imaginary; this.imaginary = other.imaginary; } public double getReal() { public double getReal() { return real; return real; } public double getImaginary() { public double getImaginary() { return imaginary; return imaginary; }
9
Class Complex (contd.) public Complex add(Complex right) { double r,i; double r,i; r = real + right.getReal(); r = real + right.getReal(); i = imaginary + right.getImaginary(); i = imaginary + right.getImaginary(); return (new Complex(r,i)); return (new Complex(r,i)); } public Complex add(double val) { public Complex add(double val) { double r; double r; r = real + val; r = real + val; return (new Complex(r,imaginary)); return (new Complex(r,imaginary)); }
10
Class Complex (contd.) public Complex multiply(Complex right) { double r,i; double r,i; r = (real * right.getReal()) - r = (real * right.getReal()) - (imaginary * right.getImaginary()); (imaginary * right.getImaginary()); i = (imaginary * right.getReal()) + i = (imaginary * right.getReal()) + (real * right.getImaginary()); (real * right.getImaginary()); return(new Complex(r,i)); return(new Complex(r,i)); } public Complex multiply(double scale) { public Complex multiply(double scale) { double r,i; double r,i; r = real * scale; r = real * scale; i = imaginary * scale; i = imaginary * scale; return(new Complex(r,i)); return(new Complex(r,i)); } public String toString() { public String toString() { return new String(real + " + " + imaginary + "*i"); return new String(real + " + " + imaginary + "*i"); }
11
Class ComplexPair public class ComplexPair { private Complex first; private Complex first; private Complex second; private Complex second; public ComplexPair(Complex first, public ComplexPair(Complex first, Complex second) { Complex second) { if(first != null) if(first != null) this.first = new Complex(first); this.first = new Complex(first); if(second != null) if(second != null) this.second = new Complex(second); this.second = new Complex(second); } public Complex getFirst() { public Complex getFirst() { if(first != null) if(first != null) return (new Complex(first)); return (new Complex(first)); return (null); return (null); } public Complex getSecond() { public Complex getSecond() { if(second != null) if(second != null) return (new Complex(second)); return (new Complex(second)); return (null); return (null); }}
12
public class QuadSolution { private int numberOfSolutions; private Complex solution1; private Complex solution2; public QuadSolution(int solNum,Complex solution1,Complex solution2) { numberOfSolutions = solNum; this.solution1 = solution1; this.solution2 = solution2; } public int numSolutions() { return numberOfSolutions; } public String toString() { String result = new String(solution1.toString()); if(numberOfSolutions == 2) result = result.concat("\n" + solution2.toString() + "\n"); return result; }
13
public Complex getSolution(int solution) { switch(solution) { case 1: return solution1; case 2: if(numberOfSolutions == 1) { System.err.println("QuadSolution Error : trying to access non" + "existant solution"); return null; } else return solution2; default: System.err.println("QuadSolution Error : trying to access illegal" + "solution number (legal values are 1,2)."); return null; } A problem here? (Aliasing)
14
public class MyMath { //Assumption : only one coefficient a or b may be zero. public QuadSolution solveQuadratic(double a,double b,double c) { int solNum; Complex solution1=null; Complex solution2=null; double disc; if(a==0) { solNum=1; solution1 = new Complex(-c/b,0.0); } else { disc = b*b - 4*a*c; if(disc==0) { solNum=1; solution1 = new Complex(-b/(2*a),0); } else if(disc<0) { disc = Math.sqrt(-disc); solution1 = new Complex(-b/(2*a),disc/(2*a)); solution2 = new Complex(-b/(2*a),-disc/(2*a)); solNum=2; } else { disc = Math.sqrt(disc); solution1 = new Complex((-b+disc)/(2*a),0); solution2 = new Complex((-b-disc)/(2*a),0); solNum=2; } return new QuadSolution(solNum,solution1,solution2); }
15
Arrays b An array is an ordered list of values 0 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91 An array of size N is indexed from zero to N-1 scores The entire array has a single name Each value has a numeric index This array holds 10 values that are indexed from 0 to 9
16
Arrays b A particular value in an array is referenced using the array name followed by the index in brackets b For example, the expression scores[2] scores[2] refers to the value 94 (which is the 3rd value in the array) b That expression represents a place to store a single integer, and can be used wherever an integer variable can b For example, it can be assigned a value, printed, or used in a calculation
17
Arrays b An array stores multiple values of the same type b That type can be primitive types or objects b Therefore, we can create an array of integers, or an array of characters, or an array of String objects, etc. b In Java, the array itself is an object b Therefore the name of the array is a object reference variable, and the array itself is instantiated separately
18
Declaring Arrays The scores array could be declared as follows: int[] scores = new int[10]; int[] scores = new int[10]; b Note that the type of the array does not specify its size, but each object of that type has a specific size The type of the variable scores is int[] (an array of integers) b It is set to a new array object that can hold 10 integers
19
Declaring Arrays b Some examples of array declarations: float[] prices = new float[500]; float[] prices = new float[500]; boolean[] flags; boolean[] flags; flags = new boolean[20]; flags = new boolean[20]; char[] codes = new char[1750]; char[] codes = new char[1750];
20
Bounds Checking b Once an array is created, it has a fixed size b An index used in an array reference must specify a valid element b That is, the index value must be in bounds (0 to N-1) b The Java interpreter will throw an exception if an array index is out of bounds b This is called automatic bounds checking
21
Bounds Checking For example, if the array codes can hold 100 values, it can only be indexed using the numbers 0 to 99 If count has the value 100, then the following reference will cause an ArrayIndexOutOfBoundsException : System.out.println (codes[count]); b It’s common to introduce off-by-one errors when using arrays for (int index=0; index <= 100; index++) codes[index] = index*50 + epsilon; problem
22
Bounds Checking Each array object has a public constant called length that stores the size of the array b It is referenced using the array name (just like any other object): scores.length scores.length Note that length holds the number of elements, not the largest index
23
public class ReverseNumbers { public static void main (String[] args) { double[] numbers = new double[10]; System.out.println ("The size of the array: " + numbers.length); for (int index = 0; index < numbers.length; index++){ System.out.print ("Enter number " + (index+1) + ": "); numbers[index] = EasyInput.readDouble(); } System.out.println ("The numbers in reverse:"); for (int index = numbers.length-1; index >= 0; index--) System.out.print (numbers[index] + " "); System.out.println (); } First example
24
public class LetterCount { public static void main (String[] args) { final int NUMCHARS = 26; int[] upper = new int[NUMCHARS]; int[] lower = new int[NUMCHARS]; char current; // the current character being processed int other = 0; // counter for non-alphabetics System.out.println ("Enter a sentence:"); String line = EasyInput.readString(); // Count the number of each letter occurance for (int ch = 0; ch < line.length(); ch++) { current = line.charAt(ch); if (current >= 'A' && current <= 'Z') upper[current-'A']++; else if (current >= 'a' && current <= 'z') lower[current-'a']++; else other++; } Second example
25
// Print the results System.out.println (); for (int letter=0; letter < upper.length; letter++) { System.out.print ( (char) (letter + 'A') ); System.out.print (": " + upper[letter]); System.out.print ("\t\t" + (char) (letter + 'a') ); System.out.println (": " + lower[letter]); } System.out.println (); System.out.println ("Non-alphabetic characters: " + other); } Second example (continued)
26
Array Declarations Revisited b The brackets of the array type can be associated with the element type or with the name of the array b Therefore the following declarations are equivalent: float[] prices; float[] prices; float prices[]; float prices[]; b The first format is generally more readable
27
Initializer Lists b An initializer list can be used to instantiate and initialize an array in one step b The values are delimited by braces and separated by commas b Examples: int[] units = {147, 323, 89, 933, 540, int[] units = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476}; 269, 97, 114, 298, 476}; char[] letterGrades = {'A', 'B', 'C', 'D', 'F'}; char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};
28
Initializer Lists b Note that when an initializer list is used: the new operator is not usedthe new operator is not used no size value is specifiedno size value is specified b The size of the array is determined by the number of items in the initializer list b An initializer list can only be used in the declaration of an array
29
Arrays of Objects b The elements of an array can be object references The following declaration reserves space to store 25 references to String objects String[] words = new String[25]; String[] words = new String[25]; It does NOT create the String objects themselves b Each object stored in an array must be instantiated separately
30
Two-Dimensional Arrays b A one-dimensional array stores a simple list of values b A two-dimensional array can be thought of as a table of values, with rows and columns b A two-dimensional array element is referenced using two index values b To be precise, a two-dimensional array in Java is an array of arrays
31
int[][] table = new int [10][10]; for (int i=0; i<10; i++) for (int j=0; j<10; j++) table[i][j] = i * j; System.out.println(table[4][3]); System.out.println(table[2][1]); Multiplication table
32
Multidimensional Arrays b An array can have as many dimensions as needed, creating a multidimensional array b Each dimension subdivides the previous one into the specified number of elements Each array dimension has its own length constant b Because each dimension is an array of array references, the arrays within one dimension could be of different lengths
33
Command-Line Arguments The signature of the main method indicates that it takes an array of String objects as a parameter b These values come from command-line arguments that are provided when the interpreter is invoked For example, the following invocation of the interpreter passes an array of three String objects into main: > java DoIt pennsylvania texas california b These strings are stored at indexes 0-2 of the parameter
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.