Select a Chapter: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Back to the Main Page | ||
Chapter Five listings: 9 classes |
/** Class methods that do useful things with numbers. */ public class MathOp { /** Return the value of 2 to the power expo. */ public static int powerOf2 (int expo) { int power = 1; for (; expo > 0; expo--) power = power * 2; return power; } //====================== /** Return sum divided by count, rounded to the nearest int.*/ public static int average (int sum, int count) { if (sum >= 0) return (sum + count / 2) / count; else return (sum - count / 2) / count; } //====================== }
public class Person extends Object { private static int theNumPersons = 0; // initialize num ///////////////////////////////// private String itsFirstName; private String itsLastName; private int itsBirthYear; /** Construct a new Person with given names and birth year. */ public Person (String first, String last, int year) { super(); theNumPersons++; // update num itsFirstName = first; itsLastName = last; // initialize last name itsBirthYear = year; } //======================= /** Tell how many different Persons exist. */ public static int getNumPersons() // access num { return theNumPersons; } //====================== /** Return the birth year. */ public int getBirthYear() { return itsBirthYear; } //======================= /** Return the first name. */ public String getFirstName() { return itsFirstName; } //======================= /** Return the last name. */ public String getLastName() // access last name { return itsLastName; } //======================= /** Replace the last name by the specified value. */ public void setLastName (String name) // update last name { itsLastName = name; } //======================= }
public class Vic extends Object { private static final String NONE = "0"; ///////////////////////////////// private String itsSequence = ""; private int itsPos = 1; private final int itsID; // assigned by the constructor public String getPosition() { return itsPos + "," + itsID; } //====================== public static void say (String message) { System.out.println ("SAYS: " + message); } //====================== private void trace (String action) { System.out.println ("Vic# " + itsID + ": " + action + itsPos + "; sequence= " + itsSequence); } //====================== public void backUp() { if (itsPos == 1) System.exit (0); itsPos--; trace ("backUp to slot "); } //====================== public void moveOn() { if ( ! seesSlot()) System.exit (0); itsPos++; trace ("moveOn to slot "); } //====================== public boolean seesSlot() { return itsPos < itsSequence.length(); } //====================== public boolean seesCD() { if ( ! seesSlot()) System.exit (0); String s = itsSequence.substring (itsPos, itsPos + 1); return ! s.equals (NONE); } //====================== // public class Vic continued: using the stack private static String theStack = ""; // initially empty public static boolean stackHasCD() { return theStack.length() > 0; } //====================== public void takeCD() { if (seesCD()) { theStack = theStack + itsSequence.substring (itsPos, itsPos + 1); itsSequence = itsSequence.substring (0, itsPos) + NONE + itsSequence.substring (itsPos + 1, itsSequence.length()); } trace ("takeCD at slot "); } //====================== public void putCD() { if ( ! seesCD() && stackHasCD()) { int atEnd = theStack.length() - 1; itsSequence = itsSequence.substring (0, itsPos) + theStack.substring (atEnd, atEnd + 1) + itsSequence.substring (itsPos + 1, itsSequence.length()); theStack = theStack.substring (0, atEnd); } trace ("putCD at slot "); } //====================== // public class Vic completed: constructor and reset private static final java.util.Random randy = new java.util.Random(); private static final String LETTERS = " abcdefghijkl"; private static int theNumVics = 0; private static String[ ] theTableau = {"", "", ""}; public static void reset (String[ ] args) { if (theNumVics == 0 && args.length > 0) theTableau = args; } //====================== public Vic() { super(); // 1 if (theNumVics < theTableau.length) // 2 { itsSequence = theTableau[theNumVics]; // 3 if (itsSequence.length() == 0) // 4 { for (int k = 3 + randy.nextInt (6); k >= 1; k--) // 5 { if (randy.nextInt (2) == 0) // 6 itsSequence = NONE + itsSequence; // 7 else // 8 itsSequence = LETTERS.substring (k, k + 1)// 9 + itsSequence; // 10 } // 11 } // 12 itsSequence = " " + itsSequence; // 13 } // 14 theNumVics++; // 15 itsID = theNumVics; // 16 trace ("constructed "); // 17 } //====================== }
import javax.swing.JOptionPane; class NetApp { /** List all nodes and tell how many there are. */ public static void main (String[ ] args) { Network school = new Network(); int count = 0; for (Position pos = school.nodes(); pos.hasNext(); pos.moveOn()) { Node current = pos.getNext(); JOptionPane.showMessageDialog (null, current.getName() + " is one of the nodes."); count++; } JOptionPane.showMessageDialog (null, "The total number of nodes is " + count); System.exit (0); } //====================== }
/** Answer queries about one or two given nodes. * Precondition for all methods: no parameter is null. */ public class NodeOp { /** Tell whether par connects only to blue nodes. */ public static boolean seesOnlyBlue (Node par) { for (Position p = par.nodes(); p.hasNext(); p.moveOn()) { if ( ! p.getNext().isBlue()) return false; } return true; } //======================= /** Tell whether from connects to target. */ public static boolean connected (Node from, Node target) { for (Position p = from.nodes(); p.hasNext(); p.moveOn()) { if (p.getNext().equals (target)) return true; } return false; } //======================= /** Tell whether par connects to any node of the same color.*/ public static boolean seesSameColor (Node par) { return par.isBlue() && ! seesOnlyNonBlue (par) || ! par.isBlue() && ! seesOnlyBlue (par); } //======================= /** Tell whether par connects to no blue node. */ public static boolean seesOnlyNonBlue (Node par) { for (Position p = par.nodes(); p.hasNext(); p.moveOn()) { if (p.getNext().isBlue()) return false; } return true; } //======================= }
import javax.swing.JOptionPane; public class SmartNet extends Network { /** Tell whether par connects to all other nodes in this * network.*/ public boolean connectsToAll (Node par) { for (Position pos = nodes(); pos.hasNext(); pos.moveOn()) { Node current = pos.getNext(); if ( ! (current.equals (par) || NodeOp.connected (current, par))) return false; } return true; } //====================== /** Return the total number of nodes in this network. */ public int getNumNodes() { int count = 0; for (Position pos = nodes(); pos.hasNext(); pos.moveOn()) count++; return count; } //====================== /** List all nodes in this network that connect to * some node of the same color. */ public void printSameColorConnections() { for (Position pos = nodes(); pos.hasNext(); pos.moveOn()) { Node current = pos.getNext(); if (NodeOp.seesSameColor (current)) JOptionPane.showMessageDialog (null, current.getName()); } } //====================== /** Tell whether every node is reachable from * the given node. */ public boolean allReachableFrom (Node source) { checkOut (source); // sets a mark of 2 on source boolean foundNodeToCheckOut; do { foundNodeToCheckOut = false; for (Position pos= nodes(); pos.hasNext(); pos.moveOn()) { Node current = pos.getNext(); if (current.getMark() == 1) { foundNodeToCheckOut = true; checkOut (current); } } }while (foundNodeToCheckOut); return allNodesAreMarked(); } //====================== /** Mark 2 on par; mark 1 on all nodes reachable from par * except for those already marked 1 or 2. * Precondition: par is not null. */ private static void checkOut (Node par) { par.setMark (2); for (Position p = par.nodes(); p.hasNext(); p.moveOn()) { Node current = p.getNext(); if (current.getMark() == 0) current.setMark (1); } } //====================== /** Tell whether all the nodes have a non-zero mark. * Also set all marks back to zero. */ private boolean allNodesAreMarked() { boolean valueToReturn = true; for (Position pos = nodes(); pos.hasNext(); pos.moveOn()) { if (pos.getNext().getMark() == 0) valueToReturn = false; else pos.getNext().setMark (0); } return valueToReturn; } //====================== /** Tell whether it is possible to travel through n nodes, * all different and all marked 0, starting from Node base. * Precondition: base is marked 0. */ public static boolean canTravelFrom (Node base, int n) { if (n <= 1) return true; base.setMark (1); for (Position p = base.nodes(); p.hasNext(); p.moveOn()) { Node current = p.getNext(); if (current.getMark() == 0 && canTravelFrom (current, n - 1)) { base.setMark (0); // restore original state return true; } } base.setMark (0); // restore original state return false; } //====================== }
public class Position extends Object { private int itsCurrent; // Node at current position on list private int itsLast; // Node at last position on list public Position (int first, int last) { super(); itsCurrent = first; itsLast = last; } //====================== /** Return the next Node in the sequence. Return null * if you have come to the end of the sequence. */ public Node getNext() { if (itsCurrent > itsLast) return null; else return new Node (itsCurrent % Network.NUM_NODES); } //====================== /** Tell whether there is another Node in the sequence. */ public boolean hasNext() { return itsCurrent <= itsLast; } //====================== /** Go one Node further in the sequence. */ public void moveOn() { itsCurrent++; } //====================== }
public class Network extends Object { public static final int NUM_NODES = 100; /////////////////////////////////////// /** Return an object that can produce all Nodes 1 at a time. */ public Position nodes() { return new Position (0, NUM_NODES - 1); } //====================== }
public class Node extends Object { private int itsID; // ranges from 0 to NUM_NODES - 1 public Node (int index) { super(); itsID = index; } //====================== /** Return an object that can produce all Nodes that * are connected to the executor, 1 at a time. */ public Position nodes() { return new Position (itsID + 1, itsID + 4); } //====================== /** Tell whether the parameter has the same contents as * the executor. */ public boolean equals (Node par) { return par != null && this.itsID == par.itsID; } //====================== /** Tell whether this Node has the property of being blue. */ public boolean isBlue() { return itsID % 2 == 1; } //====================== /** Return the name of this Node. */ public String getName() { return "Darryl"; } //====================== private int itsMark = 0; /** Assign a value to the mark on this Node. */ public void setMark (int par) { itsMark = par; } //====================== /** Return the current value marked on this Node. */ public int getMark() { return itsMark; } //====================== } |
Layout and Design Copyright © Psumonix, LLC. All Rights Reserved. |