Download int

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Introduction to
Computational Modeling of Social Systems
Java Primer III
Prof. Lars-Erik Cederman
Center for Comparative and International Studies (CIS)
Seilergraben 49, Room G.2, [email protected]
Nils Weidmann, CIS Room E.3 [email protected]
http://www.icr.ethz.ch/teaching/compmodels
Lecture, November 23, 2004
Today’s agenda
• Packages
• Arrays
– Statistics example
• Collections
– SimpleList example
2
Creating a package
• Membership of a class in a package is defined by putting a
package command at the top of the source code:
package carPackage;
public class Vehicle {
(...)
public void drive() {
(...)
}
}
• Package hierarchy:
package topPackage.subPackage1.subPackage2;
3
Using packages
• By providing the fully-qualified package name:
public class VehicleTest {
carPackage.Vehicle v;
public void driveTest() {
v.drive();
}
}
• By making the packaged classes known to the compiler:
import carPackage.Vehicle;
import carPackage.*;
// makes class „Vehicle“ visible
// makes all classes in package
// „carPackage“ visible
4
Java‘s built-in packages
• Java comes with a lot of ready-to-use
classes for different purposes
• These classes are organized in
packages
• For each package, a documentation
is available
(see java.sun.com/j2se/1.4.2/api)
5
Example: java.lang
• Wrappers for the primitive data types, example:
java.lang.Double
• „mother of all objects“: class Object
• Standard input and output streams: class System.
Remember:
public class Model {
public static void main(String[] args) {
System.out.println((int)sedan.getPersonMile() + " " +
(int)roadster.getPersonMile() + " " +
(int)suv.getPersonMile());
}
}
6
Managing many agents
•
•
•
•
Arrays and collections help the user handle many objects
Both data types are objects
Arrays are simpler and less powerful
Collections are more complex but also more flexible
7
Arrays in Java
8
• An array holds a vector or matrix of data
• Arrays must be dynamically created:
int a[] = new int[10];
Car parking[][] = new Car[n][m];
• May also declare default values:
int a[]={3,8,2,5,7,7,1,4,9,2}
3
8
a[0]=3
2 5
7
7 1
a[4]=7
4
9
2
a[9]=2
Multidimensional arrays
9
int num = new int[3][3];
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
num[i][j]=i*3+j;
Or:
int num[][]={{0,1,2},
{3,4,5},
{6,7,8}};
num[2][1]=7
0
0 0
1
1
2
2
1 3
4
5
2 6
7
8
Statistics: Code
10
public class Statistics {
public static void main(String[] args) {
int n = 10;
int maxValue = 100;
int x[] = new int[n];
int max = 0;
int sum = 0;
for (int i=0; i<n; i++) {
x[i] = (int)(Math.random() * maxValue);
System.out.print(x[i]+" ");
}
for (int i = 0; i<n; i++) {
sum = sum + x[i];
if (x[i] > max)
max = x[i];
}
System.out.println();
System.out.println("mean = " +
(double)sum/n + " max = " + max);
}
}
Output:
10 26 38 16 27 30 94 40 54 89
mean = 42.4 max = 94
Collections
• Java features collections
• Unlike arrays, collections are dynamic data structures holding objects*
that can change during run-time
• Collections can be of type ArrayList, LinkedList, Set etc. (old
type: Vector)
• Read more: chap. in Eckel book or
http://java.sun.com/docs/books/tutorial/collections/
*) Simple types have to be wrapped: Integer etc.
11
Collections: Data types
12
Collection
Set
List
ArrayList
LinkedList
Arrays and Linked Lists
13
Arrays: fast access
0
3
1
8
2
2
3
5
4
7
5
7
6
1
7
4
8
9
9
2
Linked Lists: flexibility
3
8
5
2
7
Lists in Java
14
LinkedList list = new LinkedList();
Iterator it =
list.iterator();
agent=(Agent)it.next();
list.add(a4);
a1
a2
a3
a4
Collections
15
// Basic operations
// Iterator
int size();
boolean hasNext();
boolean isEmpty();
Object next();
boolean contains(Object o);
void remove();
void add(Object o);
// ... ListIterator also:
void remove(Object o);
boolean hasPrevious();
Object is a
Iterator iterator();
Object previous;
generic root
// ... LinkedList also:
class
Object get(int i);
// Built-in algortihms:
void set(int i, Object o);
Collections.sort(List l);
// etc.
Collections.shuffle(List l);
// Bulk operations
Collections.reverse(List l);
boolean containsAll(Collection c);
addAll(Collection c);
removeAll(Collection c);
retainAll(Collection c);
Static methods, like Collections.shuffle()
clear();
and Math.random()belong to a class rather
than to an instance of a class; see Eckel!
Example: SimpleList
•
•
•
•
•
•
Create agents with different height and gender
Find average and max heights
Sort list
Divide it into girls and boys
Concatenate the two sublists
Scramble list
16
SimpleList: Sample output
0 4.53 false
1 4.58 true
2 5.67 true
3 4.67 false
4 4.97 true
5 4.07 true
6 5.69 false
7 5.48 false
8 4.73 true
9 4.03 true
Average height: 4.84
Max height: 5.69
Sorted list: [4.03, 4.07, 4.53, 4.58, 4.67, 4.73, 4.97, 5.48, 5.67, 5.69]
Girls: [4.03, 4.07, 4.58, 4.73, 4.97, 5.67]
Boys: [4.53, 4.67, 5.48, 5.69]
Boys and girls: [4.53, 4.67, 5.48, 5.69, 4.03, 4.07, 4.58, 4.73, 4.97, 5.67]
Scrambled list: [4.67, 4.58, 4.03, 4.97, 4.53, 5.69, 5.48, 4.73, 4.07, 5.67]
17
SimpleList (Agent code)
18
package simplelist;
import java.text.*;
public class Agent{
int id;
boolean female;
double height;
public Agent(int i, boolean f, double h) {
id = i;
female = f;
height = h;
}
toString() method can
be defined for printing
all Java Objects,
public String toString() {
return new DecimalFormat("###.00").format(height);
}
}
SimpleList (Model code 1)
package simplelist;
import java.util.*;
import java.text.*;
import statements necessary
when invoking packages
that are not in the Java core
public class Model {
public static void main(String[] args) {
int n = 10;
boolean female;
double height;
// Creating list
ArrayList list = new ArrayList();
...
19
SimpleList (Model code 2)
// Initializing list
for (int i=0; i<n; i++) {
if (Math.random()<0.5) {
female = true;
height = 4.0 + Math.random()*2.0;
} else {
female = false;
height = 4.5 + Math.random()*2.5;
}
Agent a = new Agent(i,female,height);
list.add(a);
System.out.println(i+" "+
(new DecimalFormat("###.00").format(height))+
" "+female);
}
...
20
SimpleList (Model code 3)
// Calculating average height
double s = 0.0;
Iterator it = list.iterator();
while (it.hasNext()) {
Agent a = (Agent)it.next();
Warning: Casting
s = s + a.height;
necessary
}
System.out.println(„Average height: "+
(new DecimalFormat("###.00").format(s/(double)n)));
// Calculating max height
double max = 0.0;
for (int i=0; i<list.size(); i++) {
Warning:
Agent a = (Agent)list.get(i);
get() and set() can be
slow in a LinkedList
if (a.height > max)
max = a.height;
}
System.out.println("Max height: "+
(new DecimalFormat("###.00").format(max)));
21
SimpleList (Model code 4)
// Sorting list
ArrayList temp = new ArrayList();
while (!list.isEmpty()) {
Agent shortest = (Agent)list.get(0);
for (int i=0; i<list.size(); i++) {
Agent a = (Agent)list.get(i);
if (a.height < shortest.height)
shortest = a;
Collections are
}
printed as lists
list.remove(shortest);
with the elements
temp.add(shortest);
defined by
}
toString()
list = temp;
System.out.println("Sorted list: "+list);
...
Note: There is a pre-defined, efficient
routine: Collections.sort()
22
SimpleList (Model code 5)
// Creating list of girls
ArrayList girls = new ArrayList(list);
it = girls.iterator();
while (it.hasNext()) {
Agent a = (Agent)it.next();
if (!a.female)
it.remove();
}
System.out.println("Girls: "+girls);
// Creating list of boys
ArrayList boys = new ArrayList();
it = list.iterator();
while (it.hasNext()) {
Agent a = (Agent)it.next();
if (!a.female)
boys.add(a);
}
System.out.println("Boys: "+boys);
Warning: Be careful
when removing objects
while iterating: remove()
can only be called
once per next()
23
SimpleList (Model code 6)
// Concatenating the two lists
ArrayList boysAndGirls = new ArrayList(boys);
boysAndGirls.addAll(girls);
System.out.println("Boys and girls: "+boysAndGirls);
// Shuffling the original list
Collections.shuffle(list);
System.out.println("Scrambled list: "+list);
24
Related documents