Problems with simple variables Hard to give up values high number of variables. Complex to sort a high number of variables by value. Impossible to use loops. Example problem: Read one hundred numbers, compute their average, and find out how many numbers are above the average. We can use an array instead of a variables. 1
Array definition An array ) מערך ( is a collection of variables of the same data type, and the collection is assigned a name. Array can be declared for any type.. )עצם ) object In Java an array is an Each variable within the collection is called an array element. An array element is identified by combining the array name and a unique index ) )אינדקס. An index is an integer from zero to 1 minus the maximum number of elements in the array. An array of size N is indexed from 0 to N 1. Array examples: list of students marks series of numbers entered by user vectors matrices 2
Array indexing In Java,array indexes always begin at zero. The array mylist has 10 values, indexed from 0 to 9. The i-th element of array mylist is specified by mylist[i-1]. double[] mylist = new double[10]; mylist reference mylist[0] 5.6 mylist[1] 4.5 Array reference variable mylist[2] mylist[3] 3.3 13.2 Array element at index 5 mylist[4] mylist[5] mylist[6] 4 34.33 34 Element value mylist[7] 45.45 mylist[8] mylist[9] 99.993 11123 3
Declaring Array Variables In Java arrays are.(עצם) objects To create an array, the reference declared. to the array must be (הפניה) The array can be created using the new operator, which Examples: allocates memory space to store values. double [ ] mylist = new double [ 10 ]; The variable mylist is declared to be an array of 10 real numbers whose type is written as double[ ]. int [ ] studgrades= new int [ 85 ]; The variable studgrades is declared to be an array of 85 integer numbers whose type is written as int[ ]. Once an array is declared to be a certain size, the number of it can hold cannot be changed. values 4
Default values and initialization When an array is created, its elements are assigned the default value of : 0 for the numeric primitive data types '\u0000' for char data types False for boolean data types. Declaring, creating, initializing in one step: double [ ] mylist1 = 1.9, 2.9, 3.4, 3.5 }; Don t use new operator if you plan to initialize the array. 5
Accessing array elements To access a value in an array, we use the name of array followed by the index in square brackets. int [ ] arr = 69,61,73,19,37 }; arr[ 2 ] =95; // initial value was 73 Array indexes are integers and we can use integer expression to specify the index. int a = 7, b = 2,c = -3; arr[ a/b ] = 71; // initial value was 19 System.out.println( arr[a + c]); // output value is 37 NOTE :when accessing array elements, be careful to ensure that the index stays within the array bounds. 6
The length of an array In order to get the number of elements in an array, you can use the length attribute of an array. The length attribute of an array returns the size of the array ( number of elements). It can be used by writing arrayname.length For example : int a = mylist.length; // a=10 int b = studgrade.length; // b=85 7
Array example 1 The program reads N integers into an array and then reverses them and prints. N value reads during the program execution. 5 15 103-2 71 Before revers 71-2 103 15 5 After revers 8
Example 1 - solution System.out.print( "Enter the number of array elements : ); int [ ] arr = new int [reader.nextint()]; for (int i=0; i < arr.length; i++) System.out.print("Enter number "+ (i+1) + " integer : ); arr[i]=reader.nextint(); } for (int i = 0; i < arr.length/2; i++) int temp = arr[i]; arr[i] = arr[arr.length i - 1]; arr[arr.length-i-1] = temp; } System.out.println(" The numbers in revers order : "); for (int i=0; i<arr.length; i++) System.out.println(arr[i]); Note :number of array elements reads during the program running It is often convenient to use for loops when handling arrays because the number of its elements is constant. 9
Array example 2 This program section reads 10 integers into an array, finds the max and min values of array elements and prints them. static final int N=10; public static void main (String[] args) int [] arr = new int[n]; for (int i=0; i< N; i++) arr[i]=reader.nextint(); int max=arr[0],min=arr[0]; for (int i = 1; i < N; i++) max=(arr[i]>max)? arr[i] : max; min =(arr[i]<min)? arr[i] : min; } System.out.println(" The max element is : "+max); System.out.println(" The min element is : "+min); } //void main If a variable is marked as final then the value of that variable cannot be changed i.e final keyword when used with a variable makes it a constant. If (arr[i])>max max = arr[i]; else max = max; 10
Sorting Sorting is the process of arranging a list of items in well defined order. Sorting values of array elements is one of the basic array manipulations. Many sorting algorithms have been developed over the years. In this course we examine two sorting algorithms: selection sort בחירה) (מיון and insertion sort.(מיון הכנסה) 11
Selection sort algorithm The selection sort algorithm selects for each position in the list the value, that should go in this position, and puts it there. 23 15 6 7 30 Scan starting with 23. 6 is smallest. Exchange 6 and 23 6 15 23 7 30 Scan starting with 15. 7 is smallest. Exchange 7 and 15 6 7 23 15 30 Scan starting with 23. 15 is smallest. Exchange 15 and 23 6 7 15 23 30 Scan starting with 23. 23 is smallest. Exchange 23 and 23 6 7 15 23 30 12
Selection sort implementation This program section uses a selection sort to arrange a list of integer ). סדר עלה ( order values into ascending int [ ] arr = 23,15,6,7,20}; for(int i=0; i<arr.length; i++) int min_pos=i; for(int j=i+1; j<arr.length; j++) if ( arr[j] < arr[min_pos] ) min_pos=j; int temp = arr[i]; // help variable arr[i]=arr[min_pos]; arr[min_pos]=temp; } } The outer loop controls the position where the next smallest value will be stored The inner loop finds the smallest value in the rest of the list. When the smallest value is determined, it is exchanged with the value stored at the index. ) סדר יורד ( order The algorithm can easily be changed to put values in descending by finding the largest value each time. 13
Insertion sort algorithm The insertion sort algorithm works by inserting each value into a previously sorted subset of the list. 3 9 6 1 2 3 is sorted. Shift nothing. Insert 9. 3 9 6 1 2 3 and 9 are sorted. Shift 9 to the right. Insert 6. 3 6 9 1 2 3,6 and 9 are sorted. Shift 9,6 and 3 to the right. Insert 1. 1 3 6 9 2 1,3,6 and 9 are sorted. Shift 9,6 and 3 to the right. Insert 2. 1 2 3 6 9 All values are sorted 14
Insertion sort implementation int [ ] arr = 3,9,6,1,2 }; for (int i = 1; i < arr.length; i++) int j = i; int a = arr[i]; while ( j > 0 && arr[ j-1] > a) arr[ j ] = arr[ j-1]; j--; } // block while arr[ j ] = a; } // block for The outer loop controls the index in the array of the next value to be inserted. The inner loop compares the current insert values with values stored with lower indexes. If the current insert value is less then the value at j position, that value is shifted to the right. 15
Java searching Searching (חיפוס) is an operation which finds the location of a given element in an array. The search is said to be successful or unsuccessful depending on whether the element that is to be searched is found or not. Definition: A key is a value that you are looking for in an array. If found, the index of the first location of the key will be returned. If not found, a value of -1 will be returned. In this course we examine two searching algorithms: (חיפוס סדרתי) - linear search.(חיפוס בינארי) - binary search 16
Linear search The simplest type of search is the liner (sequential) search. In the liner search, each element of the array is compared to the key, in the order it appears in the array, until the desired element is found. System.out.println( enter search key ); int num = reader.nextint(); // input key value boolean flag=false; for( int i=0; i< arr.length; i++) if (arr [i] == num) flag=true; break; } // if } //for if (flag ) System.out.println(num + " is at position "+i); else System.out.println(num + " not found "); This searching type can be applied to a sorted or an unsorted list. Searching in case of unsorted list starts from the 0 th element and continues until the element is found or the end of list is reached. 17
Linear search in sorted array int i; // loop counter System.out.println( enter search key ); int num = reader.nextint(); // input key value for(i=0; i< arr.length && num > = arr[i]; i++) if (arr [i] == num) System.out.println(num + " is at position "+i); break; } } //for if (i==0 i==arr.length ) System.out.println(num + " not found "); In case of sorted list we breaks the loop if the key value founded. 18
Binary search example 1 0 1 2 3 4 5 6 7 8 9 Index Find 6 in -1, 5, 6, 18, 19, 25, 46, 78, 102, 114 }. low index = 0, high index = 9. Step 1 (middle element is 19 > 6): middle index = ( 0 + 9 ) / 2 = 4 low index = 0, high index = 4-1=3 Step 2 (middle element is 5 < 6): middle index = (0 + 3 ) / 2 = 1 low index =0 +1, high index = 3 Step 3 (middle element is 6 == 6): middle index= (1 + 3 ) / 2 = 2 searched element is found! 19
Binary search example 2 index 0 1 2 3 4 5 6 7 8 9 Find 103 in -1, 5, 6, 18, 19, 25, 46, 78, 102, 114}. low index = 0, high index = 9. Step 1 (middle element is 19 <103): middle index = ( 0 + 9 ) / 2 = 4 low index =4+1, high index = 9 Step 2 (middle element is 78 < 103): middle index = (5 + 9 ) / 2 = 7 low index =7 +1, high index = 9 Step 3 (middle element is 102 <103): middle index= (8 + 9 ) / 2 = 8 low index =8 +1, high index = 9 Step 4 (middle element is 114 >103): middle index= (9 + 9 ) / 2 = 9 low index =9, high index = 9 1 = 8 low index > high index : searched value is absent! 20
Binary search algorithm 1. Get the middle element; 2. If the middle element equals to the searched value, the algorithm stops; 3. Otherwise, two cases are possible: searched value is less, than the middle element. In this case, go to the step 1 for the part of the array, before middle element. searched value is greater, than the middle element. In this case, go to the step 1 for the part of the array, after middle element. Now we should define, when iterations should stop. First case is when searched element is found. Second one is when sub-array has no elements. In this case, we can conclude, that searched value isn't present in the array. 21
Binary search implementation int [ ] arr = -1,5,6,18,19,25,46,78,102,114}; int l=0,h=arr.length; // low and high array indexes System.out.pirnt ("enter search key => "); int num = reader.nextint(); // input key value while (l < h) int mid = (l + h) / 2; // Compute mid point. if (num < arr[mid]) h=mid; else if (num > arr[mid]) l=mid+1; else System.out.println( "found in "+mid+" position ); break; } } //while if ( l>=h ) System.out.println(num + " not found ); 22
( מחרוזות ) Strings Java string is a sequence of characters. They are objects of type String. Once a String object is created it cannot be changed. Basic string operations: String st = Hello,word ; String c1 = color red, c2, c3= color green ; String bl = ; // one character string String day = reader.next(); System.out.println) The day is : +day(; String[ ] days = Sunday, Monday, Thursday }; Note: double quotations 0 1 2 3 4 5 6 7 8 c o l o r r e d Like array, every character in the string has its index, but we can t access it directly. index 23
String methods 1 1.string.length(); returns the length of this string. String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); System.out.println( "String Length is : " + len ); 2.Concatenating Strings ( + ) returns a new string that is string1 with string2 added to it at the end. String string1 = "saw I was "; System.out.println( "Dot " + string1 + "Tod ); 3.string.charAt(index); returns the character located at the String's specified index. String st = Welcome to Java"; char result = st.charat(11); System.out.println(result); This would produce following result : J This would produce String Length is : 17 This would produce Dot saw I was Tod 24
String methods 2 4. string1.compareto(sryring2) - Compares two strings lexicographically: - The result is zero if the strings are equal. - The result is a negative integer if string1 lexicographically precedes the string2 string. - The result is a positive integer if string1 lexicographically follows the string2 string. We cannot just compare strings contents by simple if statement : String st1 = Hello ; String st2 = Hello ; if(st1==st2) } st1 st2 H e l l o H e l l o because st1 and st2 are memory addresses of st1 and st2. 25
compareto method- cont. Characters in Java are based on Unicode character set, which defines an ordering of all possible characters that can be used. The compareto method can be used to determine the relative (lexicographic) order of strings. For example: String st1 = AARBNML, st2 = AARZK ; 0 1 2 3 4 5 6 st1 A A R B N M L st2 0 1 2 3 4 A A R Z K int x=st1.compareto(st2); // x = - 24: 0066-0090 26
compareto method- examples. For example: String str1 = "Strings are immutable"; String str2 = "Strings are immutable"; String str3 = "Integers are not immutable"; int result = str1.compareto( str2 ); System.out.println(result); result = str2.compareto( str3 ); System.out.println(result); result = str3.compareto( str1 ); System.out.println(result); This produces following result: 0 10-10 27
String methods 2 5. string.substring(index) returns a new string that is a substring of the string. The substring begins with the character at the specified index and extends to the end of this string. String st1 = abcdefg ; String st2 = st1.substring(3); // st2 = dfgh String st3 = st1.substring(6); //st3 = g 6. string1.indexof(string2) returns the index within string1 of the first occurrence of the substring2. If it does not occur as a substring, -1 is returned. String st1 = abcdefg, st2 = cd,st3 = abc ; int p1 = st1.indexof(st2); // p1= 2 int p2 = st1.indexof(st3); // p2 = 0 int p3 = st1.indexof( xy ); // p3 = -1 28
String methods example 1 int words = 0; // words counter int i=0; // loop counter String snc= "Welcome to Java course."; do if( snc.charat(i) == ' ') i++; This program section reads the sentences,calculates and prints it word s numbers. words++; } while( i< snc.length( ) ); This would produce 4 System.out.println( "The number of words is: "+ (++words));? 29
String methods example 2 This program section reads the string and tests it. If the string is palindrome, the program prints YES, otherwise NO. public static void main(string[] args) boolean flag=true; // help variable String str; // input string System.out.println( Enter the string ); str=reader.next(); int size = str.length(); for(int i=0; i<size/2&&flag; i++) if(str.charat(i)!= str.charat( size 1 i) flag = false; if(flag) System.out.println( YES ); else System.out.println( NO ); } size=5 0 1 2 3 4 a b c b a 30
Two-dimensional arrays Java, as with most languages, supports multi-dimensional arrays - 1-dimensional, 2-dimensional, 3-dimensional,... In practice most arrays are one-dimensional, and two-dimensional. 2-dimensional arrays are usually represented with a row-column "spreadsheet" style. Two-dimensional arrays are usually visualized as a matrix, with rows and columns. Assume we have an array, arr, with two rows and four columns. int [][] arr = new int[2][4]; // Two rows and four columns Row index 0 1 1 3 Column index 0 34 15 105-43 1 345-73 88 66 31
Declaring, Creating, and Initializing 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; static final int ROW = 4; static final int COL = 3; int array = new int [ ROW ][ COL ]; for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLS; j++) arr[i][ j ] = reader.nextint(); Two-dimensional arrays are almost always processed with nested for loops. The two index variables are often called i and j. 32
Lengths of Two-dimensional arrays int[ ][ ] x = new int[3][4]; x x[0] x[0][0] x[0][1] x[0][2] x[0][3] x[0].length is 4 x[1] x[1][0] x[1][1] x[1][2] x[1][3] x[1].length is 4 x[2] x.length is 3 x[2][0] x[2][1] x[2][2] x[2][3] x[2].length is 4 for (int i = 0; i < x.length; i++) for (int j = 0; j < x[ i ].length; j++) System.out.print ( +x[ i ][ j ]); System.out.println ( ); } You can get the size of each dimension with the length attribute. This is the most general style. 33
Lengths of Two-dimensional arrays,cont. public static void main(string[ ] args) String[ ][ ] strarray = "this","is","the","first","row"}, "this","is","the","second","row"}, "this","is","the","third","row"} }; for(int i=0; i<strarray.length; i++) for(int j=0; j<strarray[ i ].length; j++) System.out.print(strarray[ i ][ j ]+" "); System.out.println( ); } } This would produce : this is the first row this is the second row this is the third row 34
Two-dimensional array example -1 This program section checks if the diagonal s elements of square matrix are equal mat.length = 4 Minor diagonal 3 0 9 3-1 7 7 2 10 6 6-15 4 8 5 4 Main diagonal i mat[i][i] mat[i][4-i-1] 0 3 3 1 7 7 2 6 6 3 4 4 int [][] mat = 3,0,9,3},-1,7,7,2},10,6,6,-15},4,8,5,4}}; boolean flag = true; // help variable int i=0; // loop counter while ( i<mat.length && flag) if ( mat[ i ][ i ]!=mat[ i ][mat.length- i - 1] ) flag = false; i++; } // while if (flag) System.out.println( Yes"); else System.out.println( No"); 35
Two-dimensional array example -2 This program section transposes the integer square matrix. public static void main(string[ ] args) System.out.print ("Enter array size: "); int size = reader.nextint(); // size=3 int[ ][ ] a = new int[size][size]; for (int r = 0; r < a.length; r++) for (int c = 0; c < a[0].length; c++) a[r][c] = reader.nextint(); int startc = 1; for (int r = 0; r < a.length; r++) for (int c = startc; c < a[0].length; c++) int temp = a[r][c]; a[r][c] = a[c][r]; a[c][r] = temp; } // inner loop startc++; } // outer loop } // main Original array: 6 7 8 4 3 1 2 9 5 Transposed array: 6 4 2 7 3 9 8 1 5 36
Matrix multiplication Typical applications in science and engineering involve implementing various mathematical operations with matrix,for example matrix multiplication: C i, j Note: the number of columns in the A matrix m equals the number of rows in the matrix B. Square matrix 37
Matrix multiplication cont. static final int N = 3; // square matrix double[ ][ ] c = new double[n][n]; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) for (int k = 0; k < N; k++) c[i][j] + = a[i][k] * b[k][j]; } // for j } // for i 38
Puzzle 39