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 Six listings: 8 classes

import javax.swing.JOptionPane;

class GrowthRatesTester
{
     public static void main (String[ ] args)
     {    JOptionPane.showMessageDialog (null,
                    "Calculating growth for various interest rates");
          new GrowthRates();
          System.exit (0);
     }    //======================
}    //########################################################


public class GrowthRates extends Object
{
     /** Calculate time to double your money at a given rate. */

     public GrowthRates()
     {    String input = JOptionPane.showInputDialog 
                    ("Annual rate? 0 if done:");
          double rate = Double.parseDouble (input);
          while (rate > 0.0)
          {    JOptionPane.showMessageDialog (null, 
                       "It takes " + yearsToDouble (rate)
                       + " years for \nyour money to double.");
               input = JOptionPane.showInputDialog 
                      ("Another rate (0 when done):");
               rate = Double.parseDouble (input);
          }
     }    //======================


     /** Precondition:  interestRate is positive. */

     public int yearsToDouble (double interestRate)
     {    double balance = 1.0;
          int count = 0;
          while (balance < 2.0)
          {    balance = balance * (1.0 + interestRate / 100.0);
               count++;
          }
          return count;
     }    //======================     
}


import javax.swing.JOptionPane;

public class IO
{
     /** Display a message to the user of Jo's Repair Shop. */

     public static void say (Object message)
     {    JOptionPane.showMessageDialog (null, message, 
                    "Jo's Repair Shop", JOptionPane.PLAIN_MESSAGE);
     }    //======================


     /** Display the prompt to the user; wait for the user to enter
      *  a string of characters; return that String (not null). */

     public static String askLine (String prompt)
     {    String s = JOptionPane.showInputDialog (prompt);
          if (s == null)
               return "";
          else
               return s;
     }    //======================


     /** Display the prompt to the user; wait for the user to enter
      *  a number; return it, or return -1 if ill-formed.  */

     public static double askDouble (String prompt)
     {    String s = JOptionPane.showInputDialog (prompt);
          return new StringInfo (s).parseDouble (-1);
     }    //======================


     /** Display the prompt to the user; wait for the user to enter
      *  a whole number; return it, or return -1 if ill-formed.  */

     public static int askInt (String prompt)
     {    String s = JOptionPane.showInputDialog (prompt);
          return (int) new StringInfo (s).parseDouble (-1);
     }    //======================
}     


public class TestOrdered
{
     /** Tell what kind of order the 3 values are in.
      *  Precondition:  All 3 are mutually comparable. */

     public static String ordered (Comparable first, 
                Comparable second, Comparable third)
     {    if (first.compareTo (second) == 0)
               return (second.compareTo (third) <= 0)
                      ?  "in ascending order"  : "in descending order";
          else if (first.compareTo (second) < 0)
               return (second.compareTo (third) > 0)  
                      ?  "not in order"  :  "in ascending order";
          else  // first comes after second
               return (second.compareTo (third) < 0)  
                      ?  "not in order"  :  "in descending order";
     }    //=======================    
}     


public class StringInfo extends Object implements Comparable
{  
     private String itself;


     public StringInfo (String given)
     {    itself =   (given == null)  ?  ""  :  given;
     }    //======================= 


     public String toString()
     {    return itself;
     }    //=======================


     /** The standard Comparable method.
      *  Precondition: ob is a StringInfo object. */

     public int compareTo (Object ob)
     {    return itself.compareTo (((StringInfo) ob).itself);
     }    //=======================


     /** Remove all characters before index n, plus any
      *  whitespace immediately following those characters.  */

     public void trimFront (int n)
     {    while (n < itself.length() && itself.charAt (n) <= ' ')
               n++;
          itself = n > itself.length()  ?  "" : itself.substring (n);
     }    //=======================


     /** Return the first word of the String, down to but not
      *  including the first whitespace character.  */

     public String firstWord()
     {    for (int k = 0;  k < itself.length();  k++)
          {    if (itself.charAt (k) <= ' ')
                    return itself.substring (0, k);
          }
          return itself;  // since the string has no whitespace
     }    //=======================


     /** Strip out all non-digits from the StringInfo object. */

     public void retainDigits()
     {    String result = "";
          for (int k = 0;  k < itself.length();  k++)
          {    if (itself.charAt(k) >= '0' && itself.charAt(k) <= '9')
                    result += itself.charAt (k);
          }
          itself = result;
     }    //=======================


     /** Return the numeric equivalent of itself. 
      *  Ignore the first invalid character and anything after it.
      *  If the part of the string before the first invalid 
      *  character is a numeral, return the double equivalent, 
      *  otherwise return the value of badNumeral. */

     public double parseDouble (double badNumeral)
     {    if (itself.length() == 0)
               return badNumeral;
          boolean hasNoDigit = true;  // until a digit is seen
          int pos =   (itself.charAt (0) == '-')  ?  1  :  0;
          for ( ;  hasDigitAt (pos);  pos++)
               hasNoDigit = false;
          if (pos < itself.length() && itself.charAt (pos) == '.')
          {    for (pos++;  hasDigitAt (pos);  pos++)
                    hasNoDigit = false;
          }
          return hasNoDigit  ?  badNumeral
                   :  Double.parseDouble (itself.substring (0, pos));
     }    //=======================


     /** Precondition:  pos >= 0. */

     private boolean hasDigitAt (int pos)
     {    return pos < itself.length() && itself.charAt (pos) >= '0'
                                       && itself.charAt (pos) <= '9';
     }    //=======================
}


import javax.swing.*;

public class PrintSquares
{
     /** Print a table of integers 1..10 and their squares. */

     public PrintSquares()
     {    JTextArea area = new JTextArea (10, 15);               //1
          JScrollPane scroller = new JScrollPane (area);         //2
          String table = "Table of integers and their squares";  //3
          for (int k = 1;  k <= 100;  k++)                       //4
               table += "\n" + k + "\t" + k * k;                 //5
          area.append (table);                                   //6
          JOptionPane.showMessageDialog (null, scroller);        //7
     }    //======================
}    //########################################################


class PrintSquaresTester
{
     public static void main (String[ ] args)
     {    new PrintSquares();                                    //8
          System.exit (0);                                       //9
     }    //======================
}


import javax.swing.*;

public class View extends Object
{
     private JTextArea area;
     private JScrollPane scroller;


     public View (int rows, int columns)
     {    area = (rows < 1 || columns < 1)  ?  new JTextArea (2, 10)
                                    :  new JTextArea (rows, columns);
          scroller = new JScrollPane (area);
     }    //======================


     /** Show the message in a scrolled text area of a dialog. */

     public void display (String message)
     {    area.append (message); // no effect if message == null
          IO.say (scroller);
     }    //======================
}     


public class RepairOrder extends Object
{
     private String itsFirstName = "";
     private String itsLastName = "";
     private String itsRepairJob = "";
     private double itsEstimatedTime = 0.00;


     public RepairOrder (String par)
     {    if (par != null)
          {    StringInfo si = new StringInfo (par);
               si.trimFront (0);  // remove any leading whitespace
               this.itsFirstName = si.firstWord();

               si.trimFront (this.itsFirstName.length());
               this.itsLastName = si.firstWord();

               si.trimFront (this.itsLastName.length());
               this.itsRepairJob = si.toString();
          }
     }    //======================


     public String getClient()
     {    return itsFirstName + " " + itsLastName;
     }    //======================


     public String getRepairJob()
     {    return itsRepairJob;
     }    //======================


     public double getEstimatedTime()
     {    return itsEstimatedTime; 
     }    //======================


     public void setEstimatedTime (double time)
     {    if (time > 0.0 && time < 20.0)
               itsEstimatedTime = time;
     }    //======================


     public String toString()
     {    return itsLastName + ", " + itsFirstName + ": "
                 + itsRepairJob + ", time= " + itsEstimatedTime;
     }    //======================
}     


/** To compile this, compile first the Queue class in Chapter 7 listings */

public class RepairShop
{
     /** Repeatedly get repair jobs from the foreman or display
      *  the next repair job to the foreman, until there are no
      *  more jobs to be done. */

     private static final String ENTER
           = "Enter first name, last name, and description of job";
     private static final String TIMEPROMPT
           = "Estimate the time to complete the repair job";
     private static final String CHOICES = "Enter A to add another"
             + " job, X to exit, anything else to process a job";
     //////////////////////////////////////////////////
     private View output = new View (40, 25);            
     private Queue jobQueue = new Queue();               
     private RepairOrder nextJob = new RepairOrder 
                                       (IO.askLine (ENTER));
     private double totalTime = IO.askDouble (TIMEPROMPT);


     public RepairShop()
     {    nextJob.setEstimatedTime (totalTime);                        //1
          jobQueue.enqueue (nextJob);                                  //2
     }    //======================


     public void processRequests()
     {    String input = IO.askLine (CHOICES).toUpperCase();           //3
          while ( ! input.equals ("X"))                                //4
          {    if (input.equals ("A"))                                 //5
               {    nextJob = new RepairOrder (IO.askLine (ENTER));    //6
                    nextJob.setEstimatedTime (IO.askDouble (TIMEPROMPT));
                    jobQueue.enqueue (nextJob);                        //8
                    totalTime += nextJob.getEstimatedTime();           //9
                    output.display ("\nHours remaining: " + totalTime);
               }                                                       //11
               else if (jobQueue.isEmpty())                            //12
                    IO.say ("No jobs currently in the queue!");        //13
               else                                                    //14
               {    nextJob = (RepairOrder) jobQueue.dequeue();        //15
                    totalTime -= nextJob.getEstimatedTime();           //16
                    output.display ("\nNext job: " + nextJob.toString()
                                  + "\nHours remaining: " + totalTime);
               }                                                       //19
               input = IO.askLine (CHOICES).toUpperCase();             //20
          }                                                            //21
     }    //======================
}    //########################################################


class RepairShopApp
{
     public static void main (String[] args)
     {    new RepairShop().processRequests();                          //22
          System.exit (0);                                             //23
     }    //======================
}

All information Copyright (c)1999 - Dr. William C. Jones, Jr.
Layout and Design Copyright © Psumonix, LLC. All Rights Reserved.