Top Banner
Arrays rades for students in a large course we need a lot of variables uble[] grade; ade=new double[numberOfStudents tes “variables” e[0],grade[1],...,grade[numberOfStudent
33

Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Arraysgrades for students in a large course

we need a lot of variables

double[] grade;grade=new double[numberOfStudents];

creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Page 2: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Arraysdouble[] grade;grade=new double[numberOfStudents];

creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

the variables have nice namesdouble sum=0,average;for (int i=0;i<numberOfStudents;i++) sum+=grade[i];average=sum/numberOfStudentes;

Page 3: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Arrays – another exampleString[] name;int[] phoneNumber;name=new double[numberOfPeople];phoneNumber=new int[numberOfPeople];int findPhoneNumber(String searchedName) { int i=0; while ((i<numberOfPeople)&& (!searchedName.equals(name[i]))) i++; if (i==numberOfPeople) return –1; else return phoneNumber[i];}

Page 4: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #1:String[] name;int[] phoneNumber;name=new double[numberOfPeople];phoneNumber=new int[numberOfPeople];

Do we need to search the phone book sequentially?

Page 5: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

String[] name;int[] phoneNumber;name=new double[numberOfPeople];phoneNumber=new int[numberOfPeople];

not OOP!EXERCISE #2 - OOP:

What class(es) should we use?Define the class(es).

Page 6: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Arrays as parameterspublic class Test { public static double average(double[] a) { if (a.length>0) { double sum=0; for (int i=0;i<a.length;i++) sum+=a[i]; return sum/a.length; } } else return 0;} We can figure out

the size of the array!

Page 7: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Returning arrayspublic class Test { public static int[] firstNumbers(int x) { int[] a=new int[x]; for (int i=0;i<x;i++) a[i]=i; return a; }}

Page 8: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #3a:

Define a method void mirror(int[] a) {

}

a = | 6 | 10 | 3 | 2 | 1 | a = | 1 | 2 | 3 | 10 | 6 |

Page 9: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #3b:

Define a method int[] mirror(int[] a) {

}

a = | 6 | 10 | 3 | 2 | 1 | a = | 1 | 2 | 3 | 10 | 6 |

The method should not modify the input array, but return a mirrored copy

Page 10: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #4:

Define a method int maximum(int[] a) {

}

a = | 6 | 10 | 3 | 2 | 1 | 10

Page 11: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #5:

Define a method int indexOfMaximum(int[] a) {

}

a = | 6 | 10 | 3 | 2 | 1 | 1

a = | 6 | 4 | 3 | 2 | 1 | 0

a = | 6 | 1 | 3 | 2 | 10 | 4

Page 12: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #6a:

Define a method void sort(int[] a) {

}

a = | 6 | 10 | 3 | 2 | 1 | a = | 1 | 2 | 3 | 6 | 10 |

Page 13: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

int indexOfMaximum(int[] a,int length) { int index=0; for (int i=1;i<length;i++) if (a[i]>a[index]) index=i; return index;}void sort(int [] a) { for (int length=a.length;length>0;length--) { int index=indexOfMaximum(a,length); int c=a[length-1]; a[length-1]=a[index]; a[index]=c; }}

Page 14: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #7a:

Define a method int split(int[] a,int x) {

}

1,9,8,4,5,2,3,8,9,2,3,9,5,3,2,4 and 4

1,4,2,3,2,3,3,2,4,9,8,8,9,9,5

smaller or equal larger

returned index

Page 15: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

int split(int[] a,int x) { int b=0,e=a.length-1; while (b<=e) { while ((b<=e)&&(a[b]<=x)) b++; while ((b<=e)&&(a[e]>x)) e--; if (b<e) { int c=a[b]; a[b]=a[e]; a[e]=c; } } return b-1;}INVARIANT = (i<b => a[i]<=x) && (i>e => a[i]>x)

(in place – solution)

Page 16: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #7b:

Define a method int split(int[] a,int x,int start,int end) {

}

9,3,5,1,9,8,4,5,2,3,8,9,2,3,9,5,3,2,4,2,3 and 4

9,3,5,1,4,2,3,2,3,3,2,4,9,8,8,9,9,5,2,3

smaller or equal larger

returned index

Page 17: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

int split(int[] a,int x,int start,int end) { int b=start,e=end; while (b<=e) { while ((b<=e)&&(a[b]<=x)) b++; while ((b<=e)&&(a[e]>x)) e--; if (b<e) { int c=a[b]; a[b]=a[e]; a[e]=c; } } return b-1;}INVARIANT = (i<b => a[i]<=x) && (i>e => a[i]>x)

Page 18: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Can we use split for sorting?

void sort(int[] a,int start,int end) { int middle=split(a,a[start],start,end); sort(a,start,middle); sort(a,middle+1,stop);}

This never finishes.

Page 19: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Can we use split for sorting?

void sort(int[] a,int start,int end) { if (start<end) { int middle=split(a,a[start],start,end); sort(a,start,middle); sort(a,middle+1,end); }}

This never finishes, too.

it can be thatmiddle=end ormiddle+1=start

Page 20: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Can we use split for sorting?

This never finishes, too.

it can be thatmiddle=end ormiddle+1=start

Solution – modify split so that start<=middle<end.We need to modify the specification too...

Page 21: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

EXERCISE #7c:

Define a method int split2(int[] a,int x) {

}

1,9,8,4,5,2,3,8,9,2,3,9,5,3,2,4 and 4

1,4,2,3,2,3,3,2,4,9,8,8,9,9,5

smaller or equal larger or equal

returned index

we are promised that x occurs in a

+ each part has at least one element!!!

Page 22: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

int split2(int[] a,int x) { int b=0,e=a.length-1; while (true) { while (a[b]>x) b++; while (a[e]<x) e--; if (b<e) { int c=a[b]; a[b]=a[e]; a[e]=c; b++; e--; } else return e; }}

INVARIANT: (i<b => a[i]<=x) && (i>e => a[i]>=x)

CLAIM: (e>=0)&&(e<a.length-1)

Page 23: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Can we use split for sorting?

void sort(int[] a,int start,int end) { if (start<end) { int middle=split2(a,a[start],start,end); sort(a,start,middle); sort(a,middle+1,end); }}

Now it always finishes.

it cannot be thatmiddle=end ormiddle+1=start

Page 24: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Can we use split for sorting?

void sort(int[] a,int start,int end) { if (start<end) { int middle=split(a,a[start],start,end); sort(start,middle); sort(middle+1,stop); }}

QUICKSORT – one of the fastest sorting algorithms!

a[(int)(Math.random()*(end-start)+start)]

Page 25: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Array index out of bounds

int a=new int[10],b=0;for (int i=0;i<=10;i++) { a[i]=i; b+=a[i];}System.out.println(“”+b);

Page 26: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Initializing arraysint[] smallPrimes={2,3,5,7,11,13,17,23,29};

int[] smallPrimes;smallPrimes =new int[10];smallPrimes[0]=2;smallPrimes[1]=3;....smallPrimes[9]=29;

Page 27: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

int[] a = {1,2,3}; int[] b = {4,5};int[] c;

c=a;a=b;b=c;

System.out.println("a[0] = "+a[0]); System.out.println("a.length = "+a.length);

EXERCISE #8:

Page 28: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

void swap(int[] d,int []e) { int[] f=d; d=e; e=f;}

int[] a = {1,2,3}; int[] b = {4,5};int[] c;

swap(a,b);

System.out.println("a[0] = "+a[0]);

EXERCISE #9:

Page 29: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

void swap(int[] d,int []e) { int f=d[0]; d[0]=e[0]; e[0]=f;}

int[] a = {1,2,3}; int[] b = {4,5};int[] c;

swap(a,b);

System.out.println("a[0] = "+a[0]); System.out.println("a[1] = "+a[1]);

EXERCISE #10:

Page 30: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

void swap(int d,int e) { int f=d; d=e; e=d;}

int[] a = {1,2,3}; int[] b = {4,5};int[] c;

swap(a[0],b[0]);

System.out.println("a[0] = "+a[0]); System.out.println("a[1] = "+a[1]);

EXERCISE #11:

Page 31: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

class Test { private int data; public Test(int data) { this.data=data; } public int GetValue() { return data; }}

Test[] a;a=new Test[10];a[0]=new Test(3);System.println(a[0].GetValue());System.println(a[1].GetValue());

error!

Difference from C++

Page 32: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Multidimensional Arraysgrades for students in a large course, want tokeep grade for each assignment separately

double[][] grade;grade=new double[numberOfStudents][numberOfHomeworks];

Compute the average from i-th homework?Compute the sum for each student?

Page 33: Arrays grades for students in a large course we need a lot of variables double[] grade; grade=new double[numberOfStudents]; creates “variables” grade[0],grade[1],...,grade[numberOfStudents-1]

Multidimensional Arraysdouble[][] grade;grade=new double[numberOfStudents][numberOfHomeworks];

double[][] grade;grade=new double[numberOfStudents][];for (int i=0;i<numberOfStudents;i++) grade[i]=new double[numberOfHomeworks];