JAVA: An
Introduction to Problem Solving & Programming, 7th
Ed. By Walter Savitch.
ISBN 0133862119 © 2015 Pearson Education, Inc., Upper Saddle River, NJ. All Rights Reserved
|
|
|
Listing 4.1 |
import java.util.Scanner;
public class WhileDemo
{
public static void main (String [] args)
{
int count, number;
System.out.println ("Enter a number");
Scanner keyboard = new Scanner (System.in);
number = keyboard.nextInt ();
count = 1;
while (count <= number)
{
System.out.print (count + ", ");
count++;
}
System.out.println ();
System.out.println ("Buckle my shoe.");
}
}
|
Listing 4.2 |
import java.util.Scanner;
public class DoWhileDemo
{
public static void main (String [] args)
{
int count, number;
System.out.println ("Enter a number");
Scanner keyboard = new Scanner (System.in);
number = keyboard.nextInt ();
count = 1;
do
{
System.out.print (count + ", ");
count++;
}
while (count <= number);
System.out.println ();
System.out.println ("Buckle my shoe.");
}
}
|
Algorithm for Roach Population Program |
Algorithm for roach population program
1. Read houseVolume
2. Read startPopulation
3. population = startPopulation
4. totalBugVolume = population * ONE_BUG_VOLUME
5. countWeeks = 0
6. while (totalBugVolume < houseVolume)
{
newBugs = population * GROWTH_RATE
newBugVolume = newBugs * ONE_BUG_VOLUME
population = population + newBugs
totalBugVolume = totalBugVolume + newBugVolume
countWeeks = countWeeks + 1
}
7. Display startPopulation, houseVolume, countWeeks, population, and
totalBugVolume
|
Listing 4.3 |
import java.util.Scanner;
/**
Program to calculate how long it will take a population of
roaches to completely fill a house from floor to ceiling.
*/
public class BugTrouble
{
public static final double GROWTH_RATE = 0.95; //95% per week
public static final double ONE_BUG_VOLUME = 0.002; //cubic feet
public static void main (String [] args)
{
System.out.println ("Enter the total volume of your house");
System.out.print ("in cubic feet: ");
Scanner keyboard = new Scanner (System.in);
double houseVolume = keyboard.nextDouble ();
System.out.println ("Enter the estimated number of");
System.out.print ("roaches in your house: ");
int startPopulation = keyboard.nextInt ();
int countWeeks = 0;
double population = startPopulation;
double totalBugVolume = population * ONE_BUG_VOLUME;
double newBugs, newBugVolume;
while (totalBugVolume < houseVolume)
{
newBugs = population * GROWTH_RATE;
newBugVolume = newBugs * ONE_BUG_VOLUME;
population = population + newBugs;
totalBugVolume = totalBugVolume + newBugVolume;
countWeeks++;
}
System.out.println ("Starting with a roach population of " +
startPopulation);
System.out.println ("and a house with a volume of " + houseVolume +
" cubic feet,");
System.out.println ("after " + countWeeks + " weeks,");
System.out.println ("the house will be filled with " +
(int) population + " roaches.");
System.out.println ("They will fill a volume of " +
(int) totalBugVolume + " cubic feet.");
System.out.println ("Better call Debugging Experts Inc.");
}
}
|
Listing 4.4 |
import java.util.Scanner;
/**
Computes the average of a list of (nonnegative) exam scores.
Repeats computation for more exams until the user says to stop.
*/
public class ExamAverager
{
public static void main (String [] args)
{
System.out.println ("This program computes the average of");
System.out.println ("a list of (nonnegative) exam scores.");
double sum;
int numberOfStudents;
double next;
String answer;
Scanner keyboard = new Scanner (System.in);
do
{
System.out.println ();
System.out.println ("Enter all the scores to be averaged.");
System.out.println ("Enter a negative number after");
System.out.println ("you have entered all the scores.");
sum = 0;
numberOfStudents = 0;
next = keyboard.nextDouble ();
while (next >= 0)
{
sum = sum + next;
numberOfStudents++;
next = keyboard.nextDouble ();
}
if (numberOfStudents > 0)
System.out.println ("The average is " +
(sum / numberOfStudents));
else
System.out.println ("No scores to average.");
System.out.println ("Want to average another exam?");
System.out.println ("Enter yes or no.");
answer = keyboard.next ();
}
while (answer.equalsIgnoreCase ("yes"));
}
}
|
Listing 4.5 |
public class ForDemo
{
public static void main (String [] args)
{
int countDown;
for (countDown = 3 ; countDown >= 0 ; countDown--)
{
System.out.println (countDown);
System.out.println ("and counting.");
}
System.out.println ("Blast off!");
}
}
|
Listing 4.6 |
import java.util.Scanner;
/**
Illustrates the use of a boolean variable to end loop iteration.
*/
public class BooleanDemo
{
public static void main (String [] args)
{
System.out.println ("Enter nonnegative numbers.");
System.out.println ("Place a negative number at the end");
System.out.println ("to serve as an end marker.");
int sum = 0;
boolean areMore = true;
Scanner keyboard = new Scanner (System.in);
while (areMore)
{
int next = keyboard.nextInt ();
if (next < 0)
areMore = false;
else
sum = sum + next;
}
System.out.println ("The sum of the numbers is " + sum);
}
}
|
Spending Spree Algorithm |
1. amountRemaining = amount of gift certificate
2. totalSpent = 0
3. itemNumber = 1
4. while (we have money left to spend and (itemNumber <= max number of items))
{
Display amount of money left and number of items that can be bought.
Read cost of proposed purchase.
if (we can afford the purchase)
{
Display a message.
totalSpent = totalSpent + cost of item
Update amountRemaining
if (amountRemaining > 0)
{
Display amount of money left.
itemNumber++
}
else
{
Display a message (no more money).
Make this the last loop iteration.
}
}
else
Display a message (item is too expensive).
}
Display amount of money spent and farewell message.
|
Listing 4.7 |
import java.util.Scanner;
public class SpendingSpree
{
public static final int SPENDING_MONEY = 100;
public static final int MAX_ITEMS = 3;
public static void main (String [] args)
{
Scanner keyboard = new Scanner (System.in);
boolean haveMoney = true;
int leftToSpend = SPENDING_MONEY;
int totalSpent = 0;
int itemNumber = 1;
while (haveMoney && (itemNumber <= MAX_ITEMS))
{
System.out.println ("You may buy up to " +
(MAX_ITEMS - itemNumber + 1) +
" items");
System.out.println ("costing no more than $" +
leftToSpend + ".");
System.out.print ("Enter cost of item #" +
itemNumber + ": $");
int itemCost = keyboard.nextInt ();
if (itemCost <= leftToSpend)
{
System.out.println ("You may buy this item. ");
totalSpent = totalSpent + itemCost;
System.out.println ("You spent $ + totalSpent +
so far. ");
leftToSpend = SPENDING_MONEY - totalSpent;
if (leftToSpend > 0)
itemNumber++;
else
{
System.out.println ("You are out of money.);
haveMoney = false;
}
}
else
System.out.println ("You cannot buy that item.");
}
System.out.println ("You spent $" + totalSpent +
", and are done shopping.");
}
}
|
Listing 4.9 |
import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Color;
public class MultipleFaces extends JApplet
{
public static final int FACE_DIAMETER = 50;
public static final int X_FACE0 = 10;
public static final int Y_FACE0 = 5;
public static final int EYE_WIDTH = 5;
public static final int EYE_HEIGHT = 10;
public static final int X_RIGHT_EYE0 = 20;
public static final int Y_RIGHT_EYE0 = 15;
public static final int X_LEFT_EYE0 = 45;
public static final int Y_LEFT_EYE0 = Y_RIGHT_EYE0;
public static final int NOSE_DIAMETER = 5;
public static final int X_NOSE0 = 32;
public static final int Y_NOSE0 = 25;
public static final int MOUTH_WIDTH = 30;
public static final int MOUTH_HEIGHT0 = 0;
public static final int X_MOUTH0 = 20;
public static final int Y_MOUTH0 = 35;
public static final int MOUTH_START_ANGLE = 180;
public static final int MOUTH_EXTENT_ANGLE = 180;
public void paint (Graphics canvas)
{
super.paint(canvas);
int i, xOffset, yOffset; //Want i to exist after the loop ends
for (i = 0 ; i <= 4 ; i++)
{ //Draw one face:
xOffset = 50 * i;
yOffset = 30 * i;
//Draw face interior and outline:
if (i % 2 == 0) //if i is even,
{ //Make face yellow
canvas.setColor (Color.YELLOW);
canvas.fillOval (X_FACE0 + xOffset, Y_FACE0 + yOffset,
FACE_DIAMETER, FACE_DIAMETER);
}
canvas.setColor (Color.BLACK);
canvas.drawOval (X_FACE0 + xOffset, Y_FACE0 + yOffset,
FACE_DIAMETER, FACE_DIAMETER);
//Draw eyes:
canvas.setColor (Color.BLUE);
canvas.fillOval (X_RIGHT_EYE0 + xOffset, Y_RIGHT_EYE0 + yOffset,
EYE_WIDTH, EYE_HEIGHT);
canvas.fillOval (X_LEFT_EYE0 + xOffset, Y_LEFT_EYE0 + yOffset,
EYE_WIDTH, EYE_HEIGHT);
//Draw nose:
canvas.setColor (Color.BLACK);
canvas.fillOval (X_NOSE0 + xOffset, Y_NOSE0 + yOffset,
NOSE_DIAMETER, NOSE_DIAMETER);
//Draw mouth:
canvas.setColor (Color.RED);
canvas.drawArc (X_MOUTH0 + xOffset, Y_MOUTH0 + yOffset,
MOUTH_WIDTH, MOUTH_HEIGHT0 + 3 * i,
MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE);
}
//i is 5 when the previous loop ends
xOffset = 50 * i;
yOffset = 30 * i;
//Draw kissing face:
//Draw face outline:
canvas.setColor (Color.BLACK);
canvas.drawOval (X_FACE0 + xOffset, Y_FACE0 + yOffset,
FACE_DIAMETER, FACE_DIAMETER);
//Draw eyes:
canvas.setColor (Color.BLUE);
canvas.fillOval (X_RIGHT_EYE0 + xOffset, Y_RIGHT_EYE0 + yOffset,
EYE_WIDTH, EYE_HEIGHT);
canvas.fillOval (X_LEFT_EYE0 + xOffset, Y_LEFT_EYE0 + yOffset,
EYE_WIDTH, EYE_HEIGHT);
//Draw nose:
canvas.setColor (Color.BLACK);
canvas.fillOval (X_NOSE0 + xOffset, Y_NOSE0 + yOffset,
NOSE_DIAMETER, NOSE_DIAMETER);
//Draw mouth in shape of a kiss:
canvas.setColor (Color.RED);
canvas.fillOval (X_MOUTH0 + xOffset + 10, Y_MOUTH0 + yOffset,
MOUTH_WIDTH - 20, MOUTH_WIDTH - 20);
//Add text:
canvas.drawString ("Kiss, Kiss.",
X_FACE0 + xOffset + FACE_DIAMETER, Y_FACE0 + yOffset);
//Draw blushing face:
i++;
xOffset = 50 * i;
yOffset = 30 * i;
//Draw face interior and outline:
canvas.setColor (Color.PINK);
canvas.fillOval (X_FACE0 + xOffset, Y_FACE0 + yOffset,
FACE_DIAMETER, FACE_DIAMETER);
canvas.setColor (Color.BLACK);
canvas.drawOval (X_FACE0 + xOffset, Y_FACE0 + yOffset,
FACE_DIAMETER, FACE_DIAMETER);
//Draw eyes:
canvas.setColor (Color.BLUE);
canvas.fillOval (X_RIGHT_EYE0 + xOffset, Y_RIGHT_EYE0 + yOffset,
EYE_WIDTH, EYE_HEIGHT);
canvas.fillOval (X_LEFT_EYE0 + xOffset, Y_LEFT_EYE0 + yOffset,
EYE_WIDTH, EYE_HEIGHT);
//Draw nose:
canvas.setColor (Color.BLACK);
canvas.fillOval (X_NOSE0 + xOffset, Y_NOSE0 + yOffset,
NOSE_DIAMETER, NOSE_DIAMETER);
//Draw mouth: (same as on face before kissing one)
canvas.setColor (Color.RED);
canvas.drawArc (X_MOUTH0 + xOffset, Y_MOUTH0 + yOffset,
MOUTH_WIDTH, MOUTH_HEIGHT0 + 3 * (i - 2),
MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE);
//Add text:
canvas.drawString ("Tee Hee.",
X_FACE0 + 50 * i + FACE_DIAMETER, Y_FACE0 + yOffset);
}
}
|
Listing 5.1 |
public class Dog
{
public String name;
public String breed;
public int age;
public void writeOutput()
{
System.out.println("Name: " + name);
System.out.println("Breed: " + breed);
System.out.println("Age in calendar years: " + age);
System.out.println("Age in human years: " + getAgeInHumanYears());
System.out.println();
}
public int getAgeInHumanYears()
{
int humanYears = 0;
if (age <= 2)
{
humanYears = age * 11;
}
else
{
humanYears = 22 + ((age-2) * 5);
}
return humanYears;
}
}
|
Listing 5.2 |
public class DogDemo
{
public static void main(String[] args)
{
Dog balto = new Dog();
balto.name = "Balto";
balto.age = 8;
balto.breed = "Siberian Husky";
balto.writeOutput();
Dog scooby = new Dog();
scooby.name = "Scooby";
scooby.age = 42;
scooby.breed = "Great Dane";
System.out.println(scooby.name + " is a " + scooby.breed + ".");
System.out.print("He is " + scooby.age + " years old, or ");
int humanYears = scooby.getAgeInHumanYears();
System.out.println(humanYears + " in human years.");
}
}
|
Listing 5.3 |
import java.util.Scanner;
public class SpeciesFirstTry
{
public String name;
public int population;
public double growthRate;
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("What is the species' name?");
name = keyboard.nextLine ();
System.out.println ("What is the population of the species?");
population = keyboard.nextInt ();
System.out.println ("Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble ();
}
public void writeOutput ()
{
System.out.println ("Name = " + name);
System.out.println ("Population = " + population);
System.out.println ("Growth rate = " + growthRate + "%");
}
public int getPopulationIn10 ()
{
int result = 0;
double populationAmount = population;
int count = 10;
while ((count > 0) && (populationAmount > 0))
{
populationAmount = populationAmount +
(growthRate / 100) * populationAmount;
count - - ;
}
if (populationAmount > 0)
result = (int) populationAmount;
return result;
}
}
|
Listing 5.4 |
public class SpeciesFirstTryDemo
{
public static void main (String [] args)
{
SpeciesFirstTry speciesOfTheMonth = new SpeciesFirstTry ();
System.out.println ("Enter data on the Species of the Month:");
speciesOfTheMonth.readInput ();
speciesOfTheMonth.writeOutput ();
int futurePopulation = speciesOfTheMonth.getPopulationIn10 ();
System.out.println ("In ten years the population will be " +
futurePopulation);
//Change the species to show how to change
//the values of instance variables:
speciesOfTheMonth.name = "Klingon ox";
speciesOfTheMonth.population = 10;
speciesOfTheMonth.growthRate = 15;
System.out.println ("The new Species of the Month:");
speciesOfTheMonth.writeOutput ();
System.out.println ("In ten years the population will be " +
speciesOfTheMonth.getPopulationIn10 ());
}
}
|
Listing 5.5A |
/**
This class is used in the program LocalVariablesDemoProgram.
*/
public class BankAccount
{
public double amount;
public double rate;
public void showNewBalance ()
{
double newAmount = amount + (rate / 100.0) * amount;
System.out.println ("With interest added, the new amount is $" +
newAmount);
}
}
|
Listing 5.5B |
/**
A toy program to illustrate how local variables behave.
*/
public class LocalVariablesDemoProgram
{
public static void main (String [] args)
{
BankAccount myAccount = new BankAccount ();
myAccount.amount = 100.00;
myAccount.rate = 5;
double newAmount = 800.00;
myAccount.showNewBalance ();
System.out.println ("I wish my new amount were $" + newAmount);
}
}
|
Listing 5.6 |
import java.util.Scanner;
public class SpeciesSecondTry
{
public String name;
public int population;
public double growthRate;
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("What is the species' name?");
name = keyboard.nextLine ();
System.out.println ("What is the population of the species?");
population = keyboard.nextInt ();
System.out.println ("Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble ();
}
public void writeOutput ()
{
System.out.println ("Name = " + name);
System.out.println ("Population = " + population);
System.out.println ("Growth rate = " + growthRate + "%");
}
public int predictPopulation (int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while ((count > 0) && (populationAmount > 0))
{
populationAmount = (populationAmount +
(growthRate / 100) * populationAmount);
count - - ;
}
if (populationAmount > 0)
result = (int) populationAmount;
return result;
}
}
|
Listing 5.7 |
/**
Demonstrates the use of a parameter
with the method predictPopulation.
*/
public class SpeciesSecondTryDemo
{
public static void main (String [] args)
{
SpeciesSecondTry speciesOfTheMonth = new SpeciesSecondTry ();
System.out.println ("Enter data on the Species of the Month:");
speciesOfTheMonth.readInput ();
speciesOfTheMonth.writeOutput ();
int futurePopulation = speciesOfTheMonth.predictPopulation (10);
System.out.println ("In ten years the population will be " +
futurePopulation);
//Change the species to show how to change
//the values of instance variables:
speciesOfTheMonth.name = "Klingon ox";
speciesOfTheMonth.population = 10;
speciesOfTheMonth.growthRate = 15;
System.out.println ("The new Species of the Month:");
speciesOfTheMonth.writeOutput ();
System.out.println ("In ten years the population will be " +
speciesOfTheMonth.predictPopulation (10));
}
}
|
Listing 5.8 |
import java.util.Scanner;
public class SpeciesThirdTry
{
private String name;
private int population;
private double growthRate;
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("What is the species' name?");
name = keyboard.nextLine ();
System.out.println ("What is the population of the species?");
population = keyboard.nextInt ();
System.out.println ("Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble ();
}
public void writeOutput ()
{
System.out.println ("Name = " + name);
System.out.println ("Population = " + population);
System.out.println ("Growth rate = " + growthRate + "%");
}
public int predictPopulation (int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while ((count > 0) && (populationAmount > 0))
{
populationAmount = (populationAmount +
(growthRate / 100) * populationAmount);
count - - ;
}
if (populationAmount > 0)
result = (int) populationAmount;
return result;
}
}
|
Listing 5.9 |
/**
Class that represents a rectangle.
*/
public class Rectangle
{
private int width;
private int height;
private int area;
public void setDimensions (int newWidth, int newHeight)
{
width = newWidth;
height = newHeight;
area = width * height;
}
public int getArea ()
{
return area;
}
}
|
Listing 5.10 |
/**
Another class that represents a rectangle.
*/
public class Rectangle2
{
private int width;
private int height;
public void setDimensions (int newWidth, int newHeight)
{
width = newWidth;
height = newHeight;
}
public int getArea ()
{
return width * height;
}
}
|
Listing 5.11 |
import java.util.Scanner;
public class SpeciesFourthTry
{
private String name;
private int population;
private double growthRate;
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("What is the species' name?");
name = keyboard.nextLine ();
System.out.println ("What is the population of the species?");
population = keyboard.nextInt ();
System.out.println ("Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble ();
}
public void writeOutput ()
{
System.out.println ("Name = " + name);
System.out.println ("Population = " + population);
System.out.println ("Growth rate = " + growthRate + "%");
}
public int predictPopulation (int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while ((count > 0) && (populationAmount > 0))
{
populationAmount = (populationAmount +
(growthRate / 100) * populationAmount);
count - - ;
}
if (populationAmount > 0)
result = (int) populationAmount;
return result;
}
public void setSpecies (String newName, int newPopulation, double newGrowthRate) { name = newName; if (newPopulation >= 0) population = newPopulation; else { System.out.println ( "ERROR: using a negative population."); System.exit (0); } growthRate = newGrowthRate; } public String getName () { return name; } public int getPopulation () { return population; } public double getGrowthRate () { return growthRate; } } |
Listing5.12 |
import java.util.Scanner;
/**
Demonstrates the use of the mutator method setSpecies.
*/
public class SpeciesFourthTryDemo
{
public static void main (String [] args)
{
SpeciesFourthTry speciesOfTheMonth =
new SpeciesFourthTry ();
System.out.println ("Enter number of years to project:");
Scanner keyboard = new Scanner (System.in);
int numberOfYears = keyboard.nextInt ();
System.out.println (
"Enter data on the Species of the Month:");
speciesOfTheMonth.readInput ();
speciesOfTheMonth.writeOutput ();
int futurePopulation =
speciesOfTheMonth.predictPopulation (numberOfYears);
System.out.println ("In " + numberOfYears +
" years the population will be " +
futurePopulation);
//Change the species to show how to change
//the values of instance variables:
speciesOfTheMonth.setSpecies ("Klingon ox", 10, 15);
System.out.println ("The new Species of the Month:");
speciesOfTheMonth.writeOutput ();
futurePopulation =
speciesOfTheMonth.predictPopulation (numberOfYears);
System.out.println ("In " + numberOfYears +
" years the population will be " +
futurePopulation);
}
}
|
Listing 5.13 |
import java.util.Scanner;
/**
Class for the purchase of one kind of item, such as 3 oranges.
Prices are set supermarket style, such as 5 for $1.25.
*/
public class Purchase
{
private String name;
private int groupCount; //Part of a price, like the 2 in 2 for $1.99.
private double groupPrice; //Part of a price, like the $1.99
// in 2 for $1.99.
private int numberBought; //Number of items bought.
public void setName (String newName)
{
name = newName;
}
/**
Sets price to count pieces for $costForCount.
For example, 2 for $1.99.
*/
public void setPrice (int count, double costForCount)
{
if ((count <= 0) || (costForCount <= 0))
{
System.out.println ("Error: Bad parameter in setPrice.");
System.exit (0);
}
else
{
groupCount = count;
groupPrice = costForCount;
}
}
public void setNumberBought (int number)
{
if (number <= 0)
{
System.out.println ("Error: Bad parameter in setNumberBought.");
System.exit (0);
}
else
numberBought = number;
}
/**
Reads from keyboard the price and number of a purchase.
*/
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("Enter name of item you are purchasing:");
name = keyboard.nextLine ();
System.out.println ("Enter price of item as two numbers.");
System.out.println ("For example, 3 for $2.99 is entered as");
System.out.println ("3 2.99");
System.out.println ("Enter price of item as two numbers, now:");
groupCount = keyboard.nextInt ();
groupPrice = keyboard.nextDouble ();
while ((groupCount <= 0) || (groupPrice <= 0))
{ //Try again:
System.out.println (
"Both numbers must be positive. Try again.");
System.out.println ("Enter price of item as two numbers.");
System.out.println ("For example, 3 for $2.99 is entered as");
System.out.println ("3 2.99");
System.out.println (
"Enter price of item as two numbers, now:");
groupCount = keyboard.nextInt ();
groupPrice = keyboard.nextDouble ();
}
System.out.println ("Enter number of items purchased:");
numberBought = keyboard.nextInt ();
while (numberBought <= 0)
{ //Try again:
System.out.println ("Number must be positive. Try again.");
System.out.println ("Enter number of items purchased:");
numberBought = keyboard.nextInt ();
}
}
/**
Displays price and number being purchased.
*/
public void writeOutput ()
{
System.out.println (numberBought + " " + name);
System.out.println ("at " + groupCount +
" for $" + groupPrice);
}
public String getName ()
{
return name;
}
public double getTotalCost ()
{
return (groupPrice / groupCount) * numberBought;
}
public double getUnitCost ()
{
return groupPrice / groupCount;
}
public int getNumberBought ()
{
return numberBought;
}
}
|
Listing 5.14 |
public class PurchaseDemo
{
public static void main (String [] args)
{
Purchase oneSale = new Purchase ();
oneSale.readInput ();
oneSale.writeOutput ();
System.out.println ("Cost each $" + oneSale.getUnitCost ());
System.out.println ("Total cost $" + oneSale.getTotalCost ());
}
}
|
Listing5.15 |
import java.util.Scanner;
public class Oracle
{
private String oldAnswer = "The answer is in your heart.";
private String newAnswer;
private String question;
public void chat ()
{
System.out.print ("I am the oracle. ");
System.out.println ("I will answer any one-line question.");
Scanner keyboard = new Scanner (System.in);
String response;
do
{
answer ();
System.out.println ("Do you wish to ask another question?");
response = keyboard.next ();
}
while (response.equalsIgnoreCase ("yes"));
System.out.println ("The oracle will now rest.");
}
private void answer ()
{
System.out.println ("What is your question?");
Scanner keyboard = new Scanner (System.in);
question = keyboard.nextLine ();
seekAdvice ();
System.out.println ("You asked the question:");
System.out.println (" " + question);
System.out.println ("Now, here is my answer:");
System.out.println (" " + oldAnswer);
update ();
}
private void seekAdvice ()
{
System.out.println ("Hmm, I need some help on that.");
System.out.println ("Please give me one line of advice.");
Scanner keyboard = new Scanner (System.in);
newAnswer = keyboard.nextLine ();
System.out.println ("Thank you. That helped a lot.");
}
private void update ()
{
oldAnswer = newAnswer;
}
}
|
Listing 5.16 |
public class OracleDemo
{
public static void main (String [] args)
{
Oracle delphi = new Oracle ();
delphi.chat ();
}
}
|
Listing 5.17 |
import java.util.Scanner;
public class Species
{
private String name;
private int population;
private double growthRate;
/*The definition of the methods readInput, writeOutput, and predictPopulation
go here.They are the same as in Listing 5.3 and Listing 5.6 . >
< The definition of the methods setSpecies, getName, getPopulation,
and getGrowthRate go here.They are the same as in Listing 5.11 . > */
public boolean equals (Species otherObject)
{
return (this.name.equalsIgnoreCase (otherObject.name)) &&
(this.population == otherObject.population) &&
(this.growthRate == otherObject.growthRate);
}
}
|
Listing 5.18 |
public class SpeciesEqualsDemo
{
public static void main (String [] args)
{
Species s1 = new Species (), s2 = new Species ();
s1.setSpecies ("Klingon ox", 10, 15);
s2.setSpecies ("Klingon ox", 10, 15);
if (s1 == s2)
System.out.println ("Match with ==.");
else
System.out.println ("Do Not match with ==.");
if (s1.equals (s2))
System.out.println ("Match with the method equals.");
else
System.out.println ("Do Not match with the method equals.");
System.out.println ("Now change one Klingon ox.");
s2.setSpecies ("klingon ox", 10, 15); //Use lowercase
if (s1.equals (s2))
System.out.println ("Match with the method equals.");
else
System.out.println ("Do Not match with the method equals.");
}
}
|
Listing 5.19 |
import java.util.Scanner;
/**
Class for data on endangered species.
*/
public class Species
{
private String name;
private int population;
private double growthRate;
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("What is the species' name?");
name = keyboard.nextLine ();
System.out.println (
"What is the population of the species?");
population = keyboard.nextInt ();
while (population < 0)
{
System.out.println ("Population cannot be negative.");
System.out.println ("Reenter population:");
population = keyboard.nextInt ();
}
System.out.println (
"Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble ();
}
public void writeOutput ()
{
System.out.println ("Name = " + name);
System.out.println ("Population = " + population);
System.out.println ("Growth rate = " + growthRate + "%");
}
/**
Precondition: years is a nonnegative number.
Returns the projected population of the receiving object
after the specified number of years.
*/
public int predictPopulation (int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while ((count > 0) && (populationAmount > 0))
{
populationAmount = (populationAmount +
(growthRate / 100) * populationAmount);
count - - ;
}
if (populationAmount > 0)
result = (int) populationAmount;
return result;
}
public void setSpecies (String newName, int newPopulation,
double newGrowthRate)
{
name = newName;
if (newPopulation >= 0)
population = newPopulation;
else
{
System.out.println ("ERROR: using a negative population.");
System.exit (0);
}
growthRate = newGrowthRate;
}
public String getName ()
{
return name;
}
public int getPopulation ()
{
return population;
}
public double getGrowthRate ()
{
return growthRate;
}
public boolean equals (Species otherObject)
{
return (name.equalsIgnoreCase (otherObject.name)) &&
(population == otherObject.population) &&
(growthRate == otherObject.growthRate);
}
}
|
Listing 5.20 |
public class SpeciesTest
{
public static void main(String[] args)
{
Species testSpecies = new Species();
// Test the setSpecies method
testSpecies.setSpecies("Tribbles", 100, 50);
if (testSpecies.getName().equals("Tribbles") &&
(testSpecies.getPopulation() == 100) &&
(testSpecies.getGrowthRate() >= 49.99) &&
(testSpecies.getGrowthRate() <= 50.01))
{
System.out.println("Pass: setSpecies test.");
}
else
{
System.out.println("FAIL: setSpecies test.");
}
// Test the predictPopulation method
if ((testSpecies.predictPopulation(-1) == 100) &&
(testSpecies.predictPopulation(1) == 150) &&
(testSpecies.predictPopulation(5) == 759))
{
System.out.println("Pass: predictPopulation test.");
}
else
{
System.out.println("FAIL: predictPopulation test.");
}
}
}
|
Listing 5.21 |
import java.util.Scanner;
/**
This version of the class Species is only a toy example designed
to demonstrate the difference between parameters of a class type
and parameters of a primitive type.
*/
public class DemoSpecies
{
private String name;
private int population;
private double growthRate;
/**
Tries to set intVariable equal to the population of this object.
But arguments of a primitive type cannot be changed.
*/
public void tryToChange (int intVariable)
{
intVariable = this.population;
}
/**
Tries to make otherObject reference this object.
But arguments of a class type cannot be replaced.
*/
public void tryToReplace (DemoSpecies otherObject)
{
otherObject = this;
}
/**
Changes the data in otherObject to the data in this object,
which is unchanged.
*/
public void change (DemoSpecies otherObject)
{
otherObject.name = this.name;
otherObject.population = this.population;
otherObject.growthRate = this.growthRate;
}
public void readInput ()
{
Scanner keyboard = new Scanner (System.in);
System.out.println ("What is the species' name?");
name = keyboard.nextLine ();
System.out.println (
"What is the population of the species?");
population = keyboard.nextInt ();
while (population < 0)
{
System.out.println ("Population cannot be negative.");
System.out.println ("Reenter population:");
population = keyboard.nextInt ();
}
System.out.println (
"Enter growth rate (% increase per year):");
growthRate = keyboard.nextDouble ();
}
public void writeOutput ()
{
System.out.println ("Name = " + name);
System.out.println ("Population = " + population);
System.out.println ("Growth rate = " + growthRate + "%");
}
/**
Precondition: years is a nonnegative number.
Returns the projected population of the receiving object
after the specified number of years.
*/
public int predictPopulation (int years)
{
int result = 0;
double populationAmount = population;
int count = years;
while ((count > 0) && (populationAmount > 0))
{
populationAmount = (populationAmount +
(growthRate / 100) * populationAmount);
count - - ;
}
if (populationAmount > 0)
result = (int) populationAmount;
return result;
}
public void setSpecies (String newName, int newPopulation,
double newGrowthRate)
{
name = newName;
if (newPopulation >= 0)
population = newPopulation;
else
{
System.out.println ("ERROR: using a negative population.");
System.exit (0);
}
growthRate = newGrowthRate;
}
public String getName ()
{
return name;
}
public int getPopulation ()
{
return population;
}
public double getGrowthRate ()
{
return growthRate;
}
public boolean equals (Species otherObject)
{
return (name.equalsIgnoreCase (otherObject.name)) &&
(population == otherObject.population) &&
(growthRate == otherObject.growthRate);
}
}
|
Listing 5.22 |
public class ParametersDemo
{
public static void main (String [] args)
{
DemoSpecies s1 = new DemoSpecies (),
s2 = new DemoSpecies ();
s1.setSpecies ("Klingon ox", 10, 15);
int aPopulation = 42;
System.out.println ("aPopulation BEFORE calling tryToChange: "
+ aPopulation);
s1.tryToChange (aPopulation);
System.out.println ("aPopulation AFTER calling tryToChange: "
+ aPopulation);
s2.setSpecies ("Ferengie Fur Ball", 90, 56);
System.out.println ("s2 BEFORE calling tryToReplace: ");
s2.writeOutput ();
s1.tryToReplace (s2);
System.out.println ("s2 AFTER calling tryToReplace: ");
s2.writeOutput ();
s1.change (s2);
System.out.println ("s2 AFTER calling change: ");
s2.writeOutput ();
}
}
|
Listing 5.23 |
import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Color;
public class MultipleFaces extends JApplet
{
public static final int FACE_DIAMETER = 50;
public static final int X_FACE0 = 10;
public static final int Y_FACE0 = 5;
public static final int EYE_WIDTH = 5;
public static final int EYE_HEIGHT = 10;
public static final int X_RIGHT_EYE0 = 20;
public static final int Y_RIGHT_EYE0 = 15;
public static final int X_LEFT_EYE0 = 45;
public static final int Y_LEFT_EYE0 = Y_RIGHT_EYE0;
public static final int NOSE_DIAMETER = 5;
public static final int X_NOSE0 = 32;
public static final int Y_NOSE0 = 25;
public static final int MOUTH_WIDTH = 30;
public static final int MOUTH_HEIGHT0 = 0;
public static final int X_MOUTH0 = 20;
public static final int Y_MOUTH0 = 35;
public static final int MOUTH_START_ANGLE = 180;
public static final int MOUTH_EXTENT_ANGLE = 180;
/**
g is the drawing area. pos indicates the position of the face.
As pos increases, the face is drawn lower and further to the right.
*/
private void drawFaceSansMouth (Graphics g, int pos)
{
g.setColor (Color.BLACK);
g.drawOval (X_FACE0 + 50 * pos, Y_FACE0 + 30 * pos,
FACE_DIAMETER, FACE_DIAMETER);
//Draw eyes:
g.setColor (Color.BLUE);
g.fillOval (X_RIGHT_EYE0 + 50 * pos, Y_RIGHT_EYE0 + 30 * pos,
EYE_WIDTH, EYE_HEIGHT);
g.fillOval (X_LEFT_EYE0 + 50 * pos, Y_LEFT_EYE0 + 30 * pos,
EYE_WIDTH, EYE_HEIGHT);
//Draw nose:
g.setColor (Color.BLACK);
g.fillOval (X_NOSE0 + 50 * pos, Y_NOSE0 + 30 * pos,
NOSE_DIAMETER, NOSE_DIAMETER);
}
public void paint (Graphics canvas)
{
super.paint(canvas);
int i;
for (i = 0 ; i < 5 ; i++)
{ //Draw one face:
if (i % 2 == 0) //If i is even,
{ //make face yellow
canvas.setColor (Color.YELLOW);
canvas.fillOval (X_FACE0 + 50 * i, Y_FACE0 + 30 * i,
FACE_DIAMETER, FACE_DIAMETER);
}
drawFaceSansMouth (canvas, i);
//Draw mouth:
canvas.setColor (Color.RED);
canvas.drawArc (X_MOUTH0 + 50 * i, Y_MOUTH0 + 30 * i,
MOUTH_WIDTH, MOUTH_HEIGHT0 + 3 * i,
MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE);
}
//i == 5
//Draw kissing face:
drawFaceSansMouth (canvas, i);
//Draw mouth in shape of a kiss:
canvas.setColor (Color.RED);
canvas.fillOval (X_MOUTH0 + 50 * i + 10, Y_MOUTH0 + 30 * i,
MOUTH_WIDTH - 20, MOUTH_WIDTH - 20);
//Add text:
canvas.setColor (Color.BLACK);
canvas.drawString ("Kiss, Kiss.",
X_FACE0 + 50 * i + FACE_DIAMETER, Y_FACE0 + 30 * i);
//Draw blushing face:
i++;
//Draw face circle:
canvas.setColor (Color.PINK);
canvas.fillOval (X_FACE0 + 50 * i, Y_FACE0 + 30 * i,
FACE_DIAMETER, FACE_DIAMETER);
drawFaceSansMouth (canvas, i);
//Draw mouth:
canvas.setColor (Color.RED);
canvas.drawArc (X_MOUTH0 + 50 * i, Y_MOUTH0 + 30 * i,
MOUTH_WIDTH, MOUTH_HEIGHT0 + 3 * (i - 2),
MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE);
//Add text:
canvas.setColor (Color.BLACK);
canvas.drawString ("Tee Hee.",
X_FACE0 + 50 * i + FACE_DIAMETER, Y_FACE0 + 30 * i);
}
}
|
Listing 5.24 |
import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
public class Graphics2DExample extends JFrame
{
public void paint(Graphics canvas)
{
super.paint(canvas);
try
{
// Load image from default location on disk. This is inefficient
// because the image will be re-loaded everytime the JFrame is
// displayed. A better technique would be to load the image
// once in the constructor (discussed in a later chapter).
BufferedImage img = ImageIO.read(new File("java.jpg"));
// Draw the image at coordinate 50,50
canvas.drawImage(img, 50, 50, null);
// Copy the image to another buffer with a
// color model (ARGB) to support alpha blending
// that allows translucency
int w = img.getWidth(null);
int h = img.getHeight(null);
BufferedImage img2 = new
BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics g = img2.getGraphics();
g.drawImage(img, 0, 0, null);
// Create a rescale filter operation that
// makes the image 30% opaque
float[] scales = { 1f, 1f, 1f, 0.3f };
float[] offsets = new float[4];
RescaleOp rop = new RescaleOp(scales, offsets, null);
// Draw the image, applying the filter
Graphics2D g2 = (Graphics2D) canvas;
g2.drawImage(img2, rop, 150, 50);
}
catch (IOException e)
{
System.out.println("Error reading the image.");
}
}
public Graphics2DExample()
{
setSize(275,175);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
Graphics2DExample guiWindow = new Graphics2DExample();
guiWindow.setVisible(true);
}
}
|
Listing 5.25 |
import javax.swing.JApplet;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
/**
An applet that uses a label to display text.
*/
public class LabelDemo extends JApplet
{
public void init ()
{
Container contentPane = getContentPane ();
contentPane.setBackground (Color.WHITE);
//Create labels:
JLabel label1 = new JLabel ("Hello ");
JLabel label2 = new JLabel ("out there!");
//Add labels:
contentPane.setLayout (new FlowLayout ());
contentPane.add (label1);
contentPane.add (label2);
}
}
|