Chapter 4: Writing Classes (Examples) - University at Albany

Chapter 4: Writing Classes (Examples) - University at Albany

INF 523Q Chapter 4: Writing Classes (Examples) Coin.java //****************************************************************** // Coin.java Author: Lewis and Loftus // Represents a coin with two sides that can be flipped. //****************************************************************** public class Coin { public final int HEADS = 0; public final int TAILS = 1; private int face; // Sets up the coin by flipping it initially. public Coin () { flip();

} // Flips the coin by randomly choosing a face. public void flip () { face = (int) (Math.random() * 2); } Coin.java (cont.) // Returns the current face of the coin as an integer. public int getFace () { return face; } // Returns the current face of the coin as a string. public String toString() { String faceName; if (face == HEADS) faceName = "Heads"; else faceName = "Tails"; return faceName; }

} CountFlips.java //****************************************************************** // CountFlips.java Author: Lewis and Loftus // Demonstrates the use of a programmer-defined class. //****************************************************************** import Coin; public class CountFlips { // Flips a coin multiple times and counts the number of heads and tails that result. public static void main (String[] args) { final int NUM_FLIPS = 1000; int heads = 0, tails = 0; Coin myCoin = new Coin(); // instantiate the Coin object for (int count=1; count <= NUM_FLIPS; count++) CountFlips.java (cont.) { myCoin.flip(); if (myCoin.getFace() == myCoin.HEADS)

heads++; else tails++; } System.out.println ("The number flips: " + NUM_FLIPS); System.out.println ("The number of heads: " + heads); System.out.println ("The number of tails: " + tails); } } FlipRace.java

//******************************************************************** // FlipRace.java Author: Lewis and Loftus // Demonstrates the existence of separate data space in multiple // instantiations of a programmer-defined class. //******************************************************************** import Coin; public class FlipRace { // Flips two coins until one of them comes up heads a set number of times in a row. public static void main (String[] args) { final int GOAL = 3; int count1 = 0, count2 = 0; // Create two separate coin objects Coin coin1 = new Coin(); Coin coin2 = new Coin(); while (count1 < GOAL && count2 < GOAL) { coin1.flip(); coin2.flip(); FlipRace.java (cont.) // Print the flip results (uses Coin's toString method) System.out.print ("Coin 1: " + coin1); System.out.println (" Coin 2: " + coin2); // Increment or reset the counters count1 = (coin1.getFace() == coin1.HEADS) ? count1+1 : 0;

count2 = (coin2.getFace() == coin2.HEADS) ? count2+1 : 0; } // Determine the winner if (count1 < GOAL) System.out.println ("Coin 2 Wins!"); else if (count2 < GOAL) System.out.println ("Coin 1 Wins!"); else System.out.println ("It's a TIE!"); } } Account.java

//******************************************************************** // Account.java Author: Lewis and Loftus // Represents a bank account with basic services such as deposit and withdraw. //******************************************************************** import java.text.NumberFormat; public class Account { private NumberFormat fmt = NumberFormat.getCurrencyInstance(); private final double RATE = 0.045; // interest rate of 4.5% private long acctNumber; private double balance; private String name; // Sets up the account by defining its owner, account number, // and initial balance. public Account (String owner, long account, double initial) { name = owner; acctNumber = account; balance = initial; } Account.java (cont.)

// Validates the transaction, then deposits the specified amount // into the account. Returns the new balance. public double deposit (double amount) { if (amount < 0) // deposit value is negative { System.out.println (); System.out.println ("Error: Deposit amount is invalid."); System.out.println (acctNumber + " " + fmt.format(amount)); } else balance = balance + amount; return balance; } // Validates the transaction, then withdraws the specified amount // from the account. Returns the new balance. public double withdraw (double amount, double fee) { amount += fee; Account.java (cont.) if (amount < 0) // withdraw value is negative

{ System.out.println (); System.out.println ("Error: Withdraw amount is invalid."); System.out.println ("Account: " + acctNumber); System.out.println ("Requested: " + fmt.format(amount)); } else if (amount > balance) // withdraw value exceeds balance { System.out.println (); System.out.println ("Error: Insufficient funds."); System.out.println ("Account: " + acctNumber); System.out.println ("Requested: " + fmt.format(amount)); System.out.println ("Available: " + fmt.format(balance)); } else balance = balance - amount; return balance; }

Account.java (cont.) // Adds interest to the account and returns the new balance. public double addInterest () { balance += (balance * RATE); return balance; } // Returns the current balance of the account. public double getBalance () { return balance; } // Returns the account number. public long getAccountNumber () { return acctNumber; } // Returns a one-line description of the account as a string. public String toString ()

{ return (acctNumber + "\t" + name + "\t" + fmt.format(balance)); } } BankAccounts.java //******************************************************************** // BankAccounts.java Author: Lewis and Loftus // Driver to exercise the use of multiple Account objects. //******************************************************************** import Account; public class BankAccounts { // Creates some bank accounts and requests various services. public static void main (String[] args) { Account acct1 = new Account ("Ted Murphy", 72354, 102.56); Account acct2 = new Account ("Jane Smith", 69713, 40.00); Account acct3 = new Account ("Edward Demsey", 93757, 759.32); acct1.deposit (25.85); double smithBalance = acct2.deposit (500.00);

System.out.println ("Smith balance after deposit: " + smithBalance); BankAccounts.java (cont.) System.out.println ("Smith balance after withdrawal: " + acct2.withdraw (430.75, 1.50)); acct3.withdraw (800.00, 0.0); // exceeds balance acct1.addInterest(); acct2.addInterest(); acct3.addInterest(); System.out.println (); System.out.println (acct1); System.out.println (acct2); System.out.println (acct3); }

} Rational.java //******************************************************************** // Rational.java Author: Lewis and Loftus // Represents one rational number with a numerator and denominator. //******************************************************************** public class Rational { private int numerator, denominator; // Sets up the rational number by ensuring a nonzero denominator // and making only the numerator signed. public Rational (int numer, int denom) { if (denom == 0)

denom = 1; // Make the numerator "store" the sign if (denom < 0) { numer = numer * -1; denom = denom * -1; } numerator = numer; denominator = denom; reduce(); } Rational.java (cont.) // Adds this rational number to the one passed as a parameter. // A common denominator is found by multiplying the individual // denominators. public Rational add (Rational op2) { int commonDenominator = denominator * op2.getDenominator(); int numerator1 = numerator * op2.getDenominator(); int numerator2 = op2.getNumerator() * denominator; int sum = numerator1 + numerator2;

return new Rational (sum, commonDenominator); } // Subtracts the rational number passed as a parameter from this // rational number. public Rational subtract (Rational op2) { int commonDenominator = denominator * op2.getDenominator(); int numerator1 = numerator * op2.getDenominator(); int numerator2 = op2.getNumerator() * denominator; int difference = numerator1 - numerator2; return new Rational (difference, commonDenominator); } Rational.java (cont.)

// Multiplies this rational number by the one passed as a parameter. public Rational multiply (Rational op2) { int numer = numerator * op2.getNumerator(); int denom = denominator * op2.getDenominator(); return new Rational (numer, denom); } // Divides this rational number by the one passed as a parameter // by multiplying by the reciprocal of the second rational. public Rational divide (Rational op2) { return multiply (op2.reciprocal()); } // Returns the reciprocal of this rational number. public Rational reciprocal () { return new Rational (denominator, numerator); } // Returns the numerator of this rational number. public int getNumerator () { return numerator; } Rational.java (cont.)

// Returns the denominator of this rational number. public int getDenominator () { return denominator; } // Determines if this rational number is equal to the one passed // as a parameter. Assumes they are both reduced. public boolean equals (Rational op2) { return ( numerator == op2.getNumerator() && denominator == op2.getDenominator() ); } // Returns this rational number as a string. public String toString () { String result; if (numerator == 0) result = "0"; else if (denominator == 1) result = numerator + ""; else result = numerator + "/" + denominator; return result; } Rational.java (cont.)

// Reduces this rational number by dividing both the numerator // and the denominator by their greatest common divisor. private void reduce () { if (numerator != 0) { int common = gcd (Math.abs(numerator), denominator); numerator = numerator / common; denominator = denominator / common; } } // Computes and returns the greatest common divisor of the two // positive parameters. Uses Euclid's algorithm. private int gcd (int num1, int num2) { while (num1 != num2) if (num1 > num2) num1 = num1 - num2; else num2 = num2 - num1; return num1; } } RationalNumbers.java

//******************************************************************** // RationalNumbers.java Author: Lewis and Loftus // Driver to exercise the use of multiple Rational objects. //******************************************************************** import Rational; public class RationalNumbers { // Creates some rational number objects and performs various // operations on them. public static void main (String[] args) { Rational r1 = new Rational (6, 8); Rational r2 = new Rational (1, 3); System.out.println ("First rational number: " + r1); System.out.println ("Second rational number: " + r2); RationalNumbers.java (cont.) if (r1.equals(r2)) System.out.println ("r1 and r2 are equal."); else System.out.println ("r1 and r2 are NOT equal."); Rational r3 = r1.add(r2); Rational r4 = r1.subtract(r2);

Rational r5 = r1.multiply(r2); Rational r6 = r1.divide(r2); System.out.println ("r1 + r2: " + r3); System.out.println ("r1 - r2: " + r4); System.out.println ("r1 * r2: " + r5); System.out.println ("r1 / r2: " + r6); } } Die.java //******************************************************************** // Die.java Author: Lewis and Loftus // Represents one die (singular of dice) with faces showing values // between 1 and the number of faces on the die. //********************************************************************

public class Die { private final int MIN_FACES = 4; private int numFaces; // number of sides on the die private int faceValue; // current value showing on the die // Defaults to a six-sided die, initially showing 1. public Die () { numFaces = 6; faceValue = 1; } Die.java (cont.)

// Explicitly sets the size of the die. Defaults to a size of // six if the parameter is invalid. Initial face is 1. public Die (int faces) { if (faces < MIN_FACES) numFaces = 6; else numFaces = faces; faceValue = 1; } // Rolls the die and returns the result. public int roll () { faceValue = (int) (Math.random() * numFaces) + 1; return faceValue; } // Returns the current die value. public int getFaceValue () { return faceValue; } } SnakeEyes.java

//******************************************************************** // SnakeEyes.java Author: Lewis and Loftus // Demonstrates the use of a class with overloaded constructors. //******************************************************************** import Die; public class SnakeEyes { // Creates two die objects, then rolls both dice a set number of // times, counting the number of snake eyes that occur. public static void main (String[] args) { final int ROLLS = 500; int snakeEyes = 0, num1, num2; Die die1 = new Die(); // creates a six-sided die Die die2 = new Die(20); // creates a twenty-sided die for (int roll = 1; roll <= ROLLS; roll++) { num1 = die1.roll(); num2 = die2.roll(); if (num1 == 1 && num2 == 1) // check for snake eyes snakeEyes++; } System.out.println ("Number of rolls: " + ROLLS); System.out.println ("Number of snake eyes: " + snakeEyes); System.out.println ("Ratio: " + (float)snakeEyes/ROLLS); } } PigLatinTranslator.java

//******************************************************************** // PigLatinTranslator.java Author: Lewis and Loftus // Represents a translation system from English to Pig Latin. // Demonstrates method decomposition and the use of StringTokenizer. //******************************************************************** import java.util.StringTokenizer; public class PigLatinTranslator { // Translates a sentence of words into Pig Latin. public String translate (String sentence) { String result = ""; sentence = sentence.toLowerCase(); StringTokenizer tokenizer = new StringTokenizer (sentence); while (tokenizer.hasMoreTokens()) { result += translateWord (tokenizer.nextToken()); result += " "; } return result; }

PigLatinTranslator.java (cont.) // Translates one word into Pig Latin. If the word begins with a vowel, the suffix "yay // is appended to the word. Otherwise, the first letter or two are moved to the end of // the word, and "ay" is appended. private String translateWord (String word) { String result = ""; if (beginsWithVowel(word)) result = word + "yay"; else if (beginsWithPrefix(word)) result = word.substring(2) + word.substring(0,2) + "ay"; else result = word.substring(1) + word.charAt(0) + "ay"; return result; } // Determines if the specified word begins with a vowel. private boolean beginsWithVowel (String word)

{ String vowels = "aeiouAEIOU"; char letter = word.charAt(0); return (vowels.indexOf(letter) != -1); } PigLatinTranslator.java (cont.) // Determines if the specified word begins with a particular two-character prefix. private boolean beginsWithPrefix (String str) { return ( str.startsWith ("bl") || str.startsWith ("pl") || str.startsWith ("br") || str.startsWith ("pr") || str.startsWith ("ch") || str.startsWith ("sh") || str.startsWith ("cl") || str.startsWith ("sl") || str.startsWith ("cr") || str.startsWith ("sp") || str.startsWith ("dr") || str.startsWith ("sr") || str.startsWith ("fl") || str.startsWith ("st") || str.startsWith ("fr") || str.startsWith ("th") || str.startsWith ("gl") || str.startsWith ("tr") || str.startsWith ("gr") || str.startsWith ("wh") || str.startsWith ("kl") || str.startsWith ("wr") || str.startsWith ("ph") ); }

} PigLatin.java //****************************************************************** // PigLatin.java Author: Lewis and Loftus // Driver to exercise the PigLatinTranslator class. //****************************************************************** import PigLatinTranslator; import cs1.Keyboard; public class PigLatin { // Reads sentences and translates them into Pig Latin. public static void main (String[] args) { String sentence, result, another; PigLatinTranslator translator = new PigLatinTranslator(); PigLatin.java (cont.) do { System.out.println (); System.out.println ("Enter a sentence (no punctuation):"); sentence = Keyboard.readString();

System.out.println (); result = translator.translate (sentence); System.out.println ("That sentence in Pig Latin is:"); System.out.println (result); System.out.println (); System.out.print ("Translate another sentence (y/n)? "); another = Keyboard.readString(); } while (another.equalsIgnoreCase("y")); } }

Recently Viewed Presentations

  • 無投影片標題 - Scs

    無投影片標題 - Scs

    LEUNG KIT WAH PRIMARY SCHOOL Other titles: Times New Roman 新細明體 Chilada ICG Tres 標楷體 全真顏體 全真綜藝體 Lucida Handwriting Arial 華康儷粗黑 Webdings Monotype Sorts Default Design 順德聯誼總會梁潔華小學 六年級 常識科 下學期 第八課 太陽系 此 ...
  • Empirical and Molecular Formulas

    Empirical and Molecular Formulas

    Question 2. What is the empirical formula for a compound containing 68.3% lead, 10.6% sulfur and the remainder oxygen? Question 3 A compound contains sulfur, oxygen, and chlorine. Analysis shows that it contains 26.95% sulfur, and 59.61% chlorine. What is...
  • It&#x27;S Enough to Make You Faint Postural Orthostatic ...

    It'S Enough to Make You Faint Postural Orthostatic ...

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * IT'S ENOUGH TO MAKE YOU FAINT POSTURAL ORTHOSTATIC TACHYCARDIA SYNDROME Evelyn Wiener,...
  • Přednášky z lékařské biofyziky Masarykova univerzita v Brně

    Přednášky z lékařské biofyziky Masarykova univerzita v Brně

    Přednášky z lékařské biofyziky Biofyzikální ústav Lékařské fakulty Masarykovy univerzity, Brno Přístrojové metody molekulární biofyziky Obsah přednášky Biomolekulární vědy mají klíčový význam pro molekulární medicínu.
  • Singing, Songs, History and RBCC Singing, Songs, History

    Singing, Songs, History and RBCC Singing, Songs, History

    The music for the hymn was composed by Asahel Nettleton in 1813. The song has since been included in most protestant hymnals of England and the U.S., has been recorded by several artists, including Jars of Clay and The Mormon...
  • ProUnitas Inc.

    ProUnitas Inc.

    clear pathway . for children to exit the cycle of poverty, by . facilitating the entry and coordination . of services in a fashion that supports their . ... Planned expansion to cover all elementary schools within feeder pattern by...
  • CROSSING A DANGER AREA 4 June 2003 ICS1103

    CROSSING A DANGER AREA 4 June 2003 ICS1103

    crossing a danger area 4 june 2003 ics1103 * 4 june 2003 ics1103 * a danger area is any place where a moving element is vulnerable to enemy observation or fire.
  • Principles of Electronic Communication Systems

    Principles of Electronic Communication Systems

    Principles of Electronic Communication Systems Second Edition Louis Frenzel Principles of Electronic Communication Systems Second Edition Chapter 17 Telecommunication Systems ©2003 The McGraw-Hill Companies Telecommunication Systems The telecommunication system is the largest and most complex electronic communication system in the...