applications in java towson university 2013. *ref:

17
Applications in Java Towson University 2013. *Ref: http://chortle.ccsu.edu/java5/index.html

Upload: louisa-gilbert

Post on 26-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Applications in Java Towson University 2013. *Ref:

Applications in Java

Towson University 2013.

*Ref: http://chortle.ccsu.edu/java5/index.html

Page 2: Applications in Java Towson University 2013. *Ref:

The Guessing Game

Page 3: Applications in Java Towson University 2013. *Ref:

3

• Summary:– The game involves a ‘game’ object and three ‘player’ objects.– The game generates a random number between 0 and 9, and the three

player objects try to guess it.

• Classes:GuessGame.class, Player.class, GameLauncher.class

• The Logic:– The GameLauncher class is where the application starts; it has the

main() method.– In the main() method, a GuessGame object is created, and its

startGame() method is called.– The GuessGame object’s startGame() method is where the entire game

plays out. It creates three players, then “thinks” of a random number. – It then asks each player to guess, checks the results, and either prints

out information about the winning player(s) or ask them to guess again.

The Guessing Game

Page 4: Applications in Java Towson University 2013. *Ref:

4

Classes

GameLauncher

main(String[] args)

GuessGame

p1 p2 p3

startGame()

Player

number

guess()Make a GuessGame object and tells it to startGame

Instance variables for the three players

Method for making a guess

The number this player guesses

Page 5: Applications in Java Towson University 2013. *Ref:

5

public class GuessGame { Player p1; Player p2; Player p3;

public void startGame() { p1 = new Player(); p2 = new Player(); p3 = new Player(); int guessp1 = 0; int guessp2 = 0; int guessp3 = 0; boolean p1isRight = false; boolean p2isRight = false; boolean p3isRight = false;

int targetNumber = (int) (Math.random() * 10); System.out.println("I'm thinking of a number between 0 and 9...");

while (true) { System.out.println("Number to guess is " + targetNumber); p1.guess(); p2.guess(); p3.guess();

guessp1 = p1.number; System.out.println("Player one guessed " + guessp1);

GuessGame class guessp2 = p2.number; System.out.println("Player two guessed " + guessp2); guessp3 = p3.number; System.out.println("Player three guessed " + guessp3); if (guessp1 == targetNumber) { p1isRight = true; } if (guessp2 == targetNumber) { p2isRight = true; } if (guessp3 == targetNumber) { p3isRight = true; } if (p1isRight || p2isRight || p3isRight) { System.out.println("We have a winner!"); System.out.println("Player one got it right? " + p1isRight); System.out.println("Player two got it right? " + p2isRight); System.out.println("Player three got it right? " + p3isRight); System.out.println("Game is over."); break; } else { System.out.println("Players will have to try again."); } // end of if/esle } // end of while loop } // end of StartGame()} // end of class GuessGame

Page 6: Applications in Java Towson University 2013. *Ref:

6

public class Player { int number = 0; public void guess() { number = (int) (Math.random()*10); System.out.println("I'm guessing " + number); } // end of guess() } // end of class Player

Player and GameLauncher

public class GameLauncher { public static void main(String[] args) { GuessGame game = new GuessGame(); game.startGame(); } // end of main() } // end of class GameLauncher

Page 7: Applications in Java Towson University 2013. *Ref:

Numbers and Statics

Page 8: Applications in Java Towson University 2013. *Ref:

8

Math class

• Math class doesn’t have any instance variables.• If you try to make an instance of class Math: Math mathObject = new Math();

You’ll get error!• Methods in the Math class don’t use any instance

variable values. (known as a kind of utility method)• Because the methods are ‘static’, you don’t need to

have an instance of Math. • All you need is the Math class. int x = Math.round(42.2);

int y = Math.min(56, 12);

int z = Math.abs(-343);

Page 9: Applications in Java Towson University 2013. *Ref:

9

Regular (non-static) vs. static methods

• The keyword static lets a method run without any instance of the class.

• A static method means “behavior not dependent on an instance variable, so no instance/object is required. Just the class.”

Regular (non-static) method

public class Song { String title;

public Song(String t) { title = t; } // end of Song()

public void play() { SongPlayer player = new SoundPlayer(); player.playSound(title); } // end of paly() } // end of class Song

Static method

public static int min(int a, int b) {

// returns the lesser of a and b

} // end of min()

Song

title

play()Math

min() max() abs() random() …

Math.min(42,36);

s1 = new Song();s2 = new Song();

s1.play();s2.play();

Page 10: Applications in Java Towson University 2013. *Ref:

10

Calling a method

• Static mehtod using a class name Math.min(88, 77);

Math.max(88, 77);

Math.round(88.77);

Math.abs(-88);

Math.random()*10;

• Non-static method using a reference variable name Song s1 = new Song();

s1.play();

Page 11: Applications in Java Towson University 2013. *Ref:

11

Using non-static variables from inside a static method

• The compile thinks, “I don’t know which object’s instance variable you’re talking about!”

public class Duck { private int size;

public static void main(String[] args) { System.out.println("Size of duck is " + size); } // end of main()

public void setSize(int s) { size = s; } // end of setSize()

public int getSize() { return size; } // end of getSize() } // end of class Duck

1 error found:Error: non-static variable size cannot be referenced from a static context

Page 12: Applications in Java Towson University 2013. *Ref:

12

Using non-static methods from inside a static method

• The compile thinks, “I don’t know which object’s instance variable you’re talking about!”

public class Duck { private int size;

public static void main(String[] args) { System.out.println("Size of duck is " + getSize()); } // end of main()

public void setSize(int s) { size = s; } // end of setSize()

public int getSize() { return size; } // end of getSize() } // end of class Duck

1 error found:Error: non-static method getSize() cannot be referenced from a static context

Page 13: Applications in Java Towson University 2013. *Ref:

13

Static variable

• Value is the same for All instances of the class

class Duck2 { int duckCount;

public Duck2() { duckCount++; } // end of Duck2()

} // end of class Duck2

The constructor Duck2() always set duckCount to 1 each time a Duck2 was made after resetting to 0.

public class Duck3 { private int size; private static int duckCount = 0;

public Duck3() { duckCount++; } // end of Duck3()

public void setSize(int s) { size = s; } public int getSize() { return size; }} // end of class Duck3

duckCount keep incrementing each time the Duck3() constructor runs, because duckCount is static and won’t be reset to 0.

Page 14: Applications in Java Towson University 2013. *Ref:

14

Static variable vs. instance variable

Duck

size static duckCount

getSize() setSize()

Size : 20

duckCount : 4

Duck object

Size : 8

duckCount : 4

Duck object

Size : 12

duckCount : 4

Duck object

Size : 22

duckCount : 4

Duck object

• A Duck object doesn’t keep its own copy of duckCount (static).

• Duck objects all share a single copy of it.• Each Duck object has its own size variable, but only

one copy of the duckCount in the class

Page 15: Applications in Java Towson University 2013. *Ref:

15

static final variables: constants

• A variable marked final means that – once initialized – it can never change.

• The value of the static final variable will stay the same as long as the class is loaded.

•Math.PI

public static final double PI=3.141592653689793;

• Naming convention: Constant variable names should be in all caps!

• Any code can access it.• No need for an instance of class Math• PI doesn’t change

Page 16: Applications in Java Towson University 2013. *Ref:

Wrapping a primitive

Page 17: Applications in Java Towson University 2013. *Ref:

17

Wrapper class for every primitive type

• Wrapper class for every primitive type is in the java.lang package

public class Num {

public void doNums() {

ArrayList<Integer> listOfNumbers = new ArrayList<Integer>();

listOfNumbers.add(3);

int num = listOfNumbers.get(0);

} // end of doNums()

} // end of class Num

Compiler does all the wrapping for you from number 3 (int) to Integer.

Compiler automatically unwraps the Integer object to int so you can assign the int value directly to a primitive.