INFORMATION & COMPUTER SCIENCE DEPARTMENT, KFUPM

ICS102, SECTION 65  (002 Semester)

INTRODUCTION TO COMPUTING

LAB  #09 1-D Arrays

 

Instructor: Bashir M. Ghandi

 


Objectives:

To gain experience with:

 

1.  Brief Review of Arrays

An array is a contiguous list of memory cells that can be identified using a single variable.

 

 

An array is declared as shown below

      int[] grades = new int[10]; 

 

The above can also be broken into two steps:

1.             Declaration of the array:     int[] grades;

 

This declares a reference variable for an integer array (a variable that can hold the address of an integer array).

grades

 

 

2.             Creation of the array object:               grades = new int[10]; 

 

This creates the array object in the memory (just like any object) and stores its address in the reference variable grades.

 

Notice that the index of an array begins from zero and ends one less than the size.  Any attempt to access elements outside this range will make the java interpreter to throw ArrayIndexOutOfBoundsException.

 

Once an array is created, its individual elements can be accessed by using the array name followed by the index in square brackets.  Example, to assign 15 to element number 6, we write:

grades[5] = 15;

 

Each array has an instance final variable length that holds the size of the array.  This is very useful if we need to access each element of the array.  For example, the following for loop initializes each element of the array to its index:

for (int i = 0; i < grades.length; i++)

      grades[i] = i;

 

If we have the values to be assigned to an array are known, then an array can be created using initializer list as follows:

char[] vowels = {‘a’,  ‘e’,  ‘i’, ‘o’,  ‘u’}

 

This declares and creates a character array of five elements and initializes it with the vowel characters.  Notice that in this case, the size is not specified and the new operator is not used.  The compiler automatically counts the elements, creates an array of the appropriate size and fills the array with the elements. 

 

We can also create array of objects.  For example, the following declares an array to hold 10 student objects:

Student[] student = new Student[10];

 

 

However, unlike array of primitive types where primitive values are stored directly into the array cells,  array of objects is used to store the references to the objects.  For example, to store a reference to a student object in the first cell of the array, we create the student object as follows:

student[i] = new Student(. . .);

2.  Example programs

 

Example 1: The following creates two array and prints their vector and dot products.  Notice that the method vectorProduct()  method receives two array parameters and returns another array – the vector product of the two arrays.

public class Vector {
   public static void main(String[] args) {
      double[] x = {5, 2, -3, 4, -2};
      double[] y = {2, 3, 5, -4, -6};
      double[] z;
 
      z = vectorProduct(x, y);
 
      System.out.println("The vector product is: ");
      for(int k = 0; k < z.length; k++)
        System.out.print(z[k] + "   ");       
      System.out.println("\n\nThe dot product is: "+dotProduct(x,y));
   }
 
   public static double[] vectorProduct(double[] a, double[] b) { 
      double[] t = new double[a.length];
      for(int i = 0; i < a.length; i++)
        t[i] = a[i] * b[i];
 
      return t;
   }
   
   public static double dotProduct(double[] a, double[] b) {
      double sum=0;
      for(int i = 0; i < a.length; i++)
        sum = a[i] * b[i];
 
      return sum;
   }
}

 

Example 2: The demonstrates array cloning.

public class ArrayCloning {
   public static void main(String[] args)     {
      int k;
      double[] x = {5, 2, -3, 4, -2};
      double[] y = new double[5];
      double[] z = {10, 25, 30, 45};
      double[] w;
 
      y = x;   // y and x refer to the same object. The object that was referenced by y is lost
   
      System.out.println("The array referenced by y is: ");
      for(k = 0; k < y.length; k++)
        System.out.print(y[k] + "   ");
 
      x[0] = 200;
      x[4] = 66;
      System.out.println("\n\nThe array referenced by y is: ");
      for(k = 0; k < y.length; k++)
        System.out.print(y[k] + "   ");
 
      w = (double[])z.clone();  // w and z refer to different objects
 
      z[0] = 88;
      z[2] = -99;
      System.out.println("\n\nThe array referenced by w is: ");
      for(k = 0; k < w.length; k++)
        System.out.print(w[k] + "   ");
   }
}

 

 

Example 3:  The following examples shows that we can have array as an instance variable.  It also shows how array instance variable may be initialized by a constructor.  Notice that the Student class is in its own separate file.

class Student {
   private int iDNumber;
   double[] quiz;
   
   public Student(int iDNumber, double[] quiz) {
      this.iDNumber = iDNumber;
      this.quiz = quiz;
   }
   public int getID()  {
      return iDNumber;
   }
   public double getQuiz(int quizNumber) {
      if(quizNumber >= 1 && quizNumber <= quiz.length)
        return quiz[quizNumber - 1];
      else
          return -1.0;
   }
   public void setQuiz(int quizNumber, double quizGrade) {
      if(quizNumber >= 1 && quizNumber <= quiz.length)
        quiz[quizNumber - 1] = quizGrade;
   }
   public double sum() {
      double sum = 0;
      for(int k = 0; k < quiz.length; k++)
        sum += quiz[k];
        
      return sum;
   }
   public double average() {
      return sum() / quiz.length;
   }
   public String toString() {
      String s = ""+iDNumber;
      for (int i = 0; i<quiz.length; i++)
         s += "\t"+quiz[i];
      s += "\t"+average();
      
      return s;
   }
}

 

import java.io.*;
public class TestStudent {
   public static void main(String[] args)     {
      double[] quiz = {50, 30, 60, 55};
      Student student = new Student(980000, quiz);
      
      /* destroy the object referenced by quiz, so that the only way to obtain quiz information is from the object referenced by student
      */
      quiz = null;
        
      System.out.println("Student information before changing grade:");
      System.out.println(student);
      
      student.setQuiz(3, 90);
      student.setQuiz(4, 75);
      
      System.out.println("\nStudent information after changing grades:");
      System.out.println(student);
   }
}

 

Example 4:  The following example shows how to use array of objects.  It uses the same Student class as in example 3 above to create an array of three students objects, each one having ID number and three quizzes.  The Program then prints the average of each students and the overall average for all students.

import java.io.*;
 
public class TestStudent2 {
   static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
   static final int STUDENT_COUNT = 3,  QUIZZES_COUNT = 3;
   
   public static void main(String[] args) throws IOException {
      Student[] student = new Student[STUDENT_COUNT];
      
      double sum=0;
      for(int i = 0; i < student.length; i++) {
        System.out.println("\nCreating student #"+ (i+1));
        student[i] = createStudent();
      }
      
      System.out.println("\nID\tAverage");
      for(int i = 0; i < student.length; i++) {
        System.out.println(student[i].getID()+"\t"+student[i].average());
        sum += student[i].sum();
       }
      System.out.println("\nOverall average is: " + sum/(STUDENT_COUNT*QUIZZES_COUNT));
   }
   
   static Student createStudent() throws IOException {
      int id;
      double[] quiz = new double[QUIZZES_COUNT];
      System.out.print("Enter student ID# ");
      id = Integer.parseInt(stdin.readLine().trim());
      
      System.out.println("\nEnter three quizzes for this student");
      for (int i=0; i<quiz.length; i++) {
        System.out.print("Quiz#"+ (i+1)+ " ");
          quiz[i] = Double.parseDouble(stdin.readLine().trim());
      }
      
      Student s = new Student(id, quiz);
      return s;
   }                   
}

 

3.  Assignments

1.       Modify example 3 so that after the array is created (as in example 3), it displays a menu that allows the operations shown in the following figure to be performed in a loop until the Quit option is chosen.

 

Note:  If the first option is chosen, your program should prompt for and read a quiz number.  It then calls the getQuiz() method to print it.  If option 3 is chosen, your program should prompts for and read the quiz number and the new grade for that quiz.  It then calls the setQuiz() method to change the grade and then display the updated student information.

 

2.       Modify example 4 as follows:

·         Add another method, static double quizAverege(Student[] student, int k) that receives an array of student objects and a quiz number as parameters.  It then returns the average for that quiz.

·         Now modifies the main method so that it prints :

o        the ID number, grades and average of each student in a tabular form

o        the average of each each quiz

o        the overall average for all students.

 

 

3.        Write a program that uses the BankAccount class of previous labs to create an array of four BankAccount objects.  The program than finds and prints the average balance.  It then prints all accounts that have a balance equal or greater than the average balance.