lab manual java

Download Lab manual java

If you can't read please download the document

Upload: globo1

Post on 23-Oct-2015

424 views

Category:

Documents


6 download

DESCRIPTION

Java manual book

TRANSCRIPT

  • LAB MANUALto Accompany

    Diane ChristieUniversity of Wisconsin Stout

    Christie_434242_LM 2/14/06 1:49 PM Page i

  • Publisher Greg TobinSenior Acquisitions Editor Michael HirschEditorial Assistant Lindsey TriebelCover Designer Nicole ClaytonMarketing Manager Michelle BrownMarketing Assistant Dana LopreatoPrepress and Manufacturing Caroline FellSupplement Coordination Marianne GrothProofreader Melanie Aswell

    Many of the designations used by manufacturers and sellers to distinguish their prod-ucts are claimed as trademarks. Where those designations appear in this book, andAddison-Wesley was aware of a trademark claim, the designations have been printed ininitial caps or all caps.

    Copyright 2007 Pearson Education, Inc.

    All rights reserved. No part of this publication may be reproduced, stored in a retrievalsystem, or transmitted, in any form or by any means, electronic, mechanical, photo-copying, recording, or otherwise, without the prior written permission of the publisher.Printed in the United States of America. For information on obtaining permission foruse of material in this work, please submit a written request to Pearson Education, Inc.,Rights and Contracts Department, 75 Arlington Street, Suite 300, Boston, MA 02116,fax your request to 617-848-7047, or e-mail at http://www.pearsoned.com/legal/per-missions.htm.

    ISBN 0-321-43424-21 2 3 4 5 6 7 8 9 10BB09 08 07 06

    Christie_434242_LM 2/14/06 1:49 PM Page ii

  • Preface

    About this Lab Manual

    This lab manual accompanies Starting Out With Java 5: From Control Structures toObjects, by Tony Gaddis. Each lab gives students hands on experience with the majortopics in each chapter. It is designed for closed laboratoriesregularly scheduledclasses supervised by an instructor, with a length of approximately two hours. Labmanual chapters correspond to textbook chapters. Each chapter in the lab manual con-tains learning objectives, an introduction, one or two projects with various tasks for thestudents to complete, and a listing of the code provided as the starting basis for eachlab. Labs are intended to be completed after studying the corresponding textbookchapter, but prior to programming challenges for each chapter in the textbook.

    Students should copy the partially written code (available at www.aw.com/cssupport)and use the instructions provided in each task to complete the code so that it is opera-tional. Instructions will guide them through each lab having them add code at speci-fied locations in the partially written program. Students will gain experience in writingcode, compiling and debugging, writing testing plans, and finally executing and testingtheir programs.

    Note: Labs 7 and 12 are written entirely by the student using the instructions inthe various tasks, so there is no code provided as a starting basis.

    What Youll Find in this Lab Manual

    The Lab Manual contains 15 labs that help students learn how to apply introductoryprogramming concepts:

    Chapter 1 Lab Algorithms, Errors, and Testing Chapter 2 Lab Java Fundamentals Chapter 3 Lab Selection Control Structures Chapter 4 Lab Loops and Files Chapter 5 Lab Methods Chapter 6 Lab Classes and Objects Chapter 7 Lab GUI Applications Chapter 8 Lab Arrays Chapter 9 Lab More Classes and Objects Chapter 10 Lab Text Processing and Wrapper Classes Chapter 11 Lab Inheritance Chapter 12 Lab Exceptions and I/O Streams Chapter 13 Lab Advanced GUI Applications Chapter 14 Lab Applets and More Chapter 15 Lab Recursion

    Christie_434242_LM 2/14/06 1:49 PM Page iii

  • Supplementary Materials

    Students can find source code files for the labs at www.aw.com/cssupport, underauthor Christie and title Lab Manual to Accompany Starting Out with Java 5:From Control Structures to Objects or Gaddis, Starting Out with Java 5:From Control Structures to Objects.

    Solution files and source code are available to qualified instructors at Addison-Wesleys Instructor Resource Center. Register at www.aw.com/irc and search forauthor Gaddis.

    Acknowledgements

    I would like to thank everyone at Addison-Wesley for making this lab manual a reality,Tony Gaddis for having the confidence in me to write labs to accompany his books andmy colleagues who have contributed ideas to help develop these labs.

    I also thank my students at the University of Wisconsin-Stout for giving me feed-back on these labs to continue to improve them.

    Most of all, I want to thank my family: Michael, Andrew, and Pamela for all oftheir encouragement, patience, love, and support.

    iv Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page iv

  • Contents

    Chapter 1 Lab Algorithms, Errors, and Testing 1

    Chapter 2 Lab Java Fundamentals 9

    Chapter 3 Lab Selection Control Structures 21

    Chapter 4 Lab Loops and Files 31

    Chapter 5 Lab Methods 41

    Chapter 6 Lab Classes and Objects 51

    Chapter 7 Lab GUI Applications 61

    Chapter 8 Lab Arrays 67

    Chapter 9 Lab More Classes and Objects 75

    Chapter 10 Lab Text Processing and Wrapper Classes 87

    Chapter 11 Lab Inheritance 97

    Chapter 12 Lab Exceptions and I/O Streams 109

    Chapter 13 Lab Advanced GUI Applications 113

    Chapter 14 Lab Applets and More 121

    Chapter 15 Lab Recursion 127

    Christie_434242_LM 2/14/06 1:49 PM Page v

  • Christie_434242_LM 2/14/06 1:49 PM Page vi

  • Chapter 1 LabAlgorithms, Errors, and Testing

    Objectives Be able to write an algorithm Be able to compile a Java program Be able to execute a Java program using the Sun JDK or a Java IDE Be able to test a program Be able to debug a program with syntax and logic errors

    Introduction

    Your teacher will introduce your computer lab and the environment you will be usingfor programming in Java.

    In chapter 1 of the textbook, we discuss writing your first program. The examplecalculates the users gross pay. It calculates the gross pay by multiplying the number ofhours worked by hourly pay rate. However, it is not always calculated this way. Whatif you work 45 hours in a week? The hours that you worked over 40 hours are consid-ered overtime. You will need to be paid time and a half for the overtime hours youworked.

    In this lab, you are given a program which calculates users gross pay with or with-out overtime. You are to work backwards this time, and use pseudocode to write analgorithm from the Java code. This will give you practice with algorithms while allow-ing you to explore and understand a little Java code before we begin learning the Javaprogramming language.

    You will also need to test out this program to ensure the correctness of the algo-rithm and code. You will need to develop test data that will represent all possible kindsof data that the user may enter.

    You will also be debugging a program. There are several types of errors. In this lab,you will encounter syntax and logic errors. We will explore runtime errors in lab 2.

    1. Syntax Errorserrors in the grammar of the programming language. Theseare caught by the compiler and listed out with line number and error found. Youwill learn how to understand what they tell you with experience. All syntaxerrors must be corrected before the program will run. If the program runs, this

    Christie_434242_LM 2/14/06 1:49 PM Page 1

  • does not mean that it is correct, only that there are no syntax errors. Examplesof syntax errors are spelling mistakes in variable names, missing semicolon,unpaired curly braces, etc.

    2. Logic Errorserrors in the logic of the algorithm. These errors emphasize theneed for a correct algorithm. If the statements are out of order, if there areerrors in a formula, or if there are missing steps, the program can still run andgive you output, but it may be the wrong output. Since there is no list of errorsfor logic errors, you may not realize you have errors unless you check your out-put. It is very important to know what output you expect. You should test yourprograms with different inputs, and know what output to expect in each case.For example, if your program calculates your pay, you should check three dif-ferent cases: less than 40 hours, 40 hours, and more than 40 hours. Calculateeach case by hand before running your program so that you know what toexpect. You may get a correct answer for one case, but not for another case.This will help you figure out where your logic errors are.

    3. Run time errorserrors that do not occur until the program is run, and thenmay only occur with some data. These errors emphasize the need for complete-ly testing your program.

    2 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 2

  • Task #1 Writing an Algorithm

    1. Copy the file Pay.java (see code listing 1.1) from www.aw.com/cssupport or asdirected by your instructor.

    2. Open the file in your Java Integrated Development Environment (IDE) or a texteditor as directed by your instructor. Examine the file, and compare it with thedetailed version of the pseudocode in step number 3, section 1.6 of the text-book. Notice that the pseudocode does not include every line of code. The pro-gram code includes identifier declarations and a statement that is needed toenable Java to read from the keyboard. These are not part of actually complet-ing the task of calculating pay, so they are not included in the pseudocode. Theonly important difference between the example pseudocode and the Java codeis in the calculation. Below is the detailed pseudocode from the example, butwithout the calculation part. You need to fill in lines that tell in English whatthe calculation part of Pay.java is doing.

    Display How many hours did you work?Input hoursDisplay How much do you get paid per hour?Input rate

    Display the value in the pay variable.

    Chapter 1 Lab Algorithms, Errors, and Testing 3

    Christie_434242_LM 2/14/06 1:49 PM Page 3

  • Task #2 Compile and Execute a Program

    1. Compile the Pay.java using the Sun JDK or a Java IDE as directed by yourinstructor.

    2. You should not receive any error messages.

    3. When this program is executed, it will ask the user for input. You should calcu-late several different cases by hand. Since there is a critical point at which thecalculation changes, you should test three different cases: the critical point, anumber above the critical point, and a number below the critical point. Youwant to calculate by hand so that you can check the logic of the program. Fillin the chart below with your test cases and the result you get when calculatingby hand.

    4. Execute the program using your first set of data. Record your result. You willneed to execute the program three times to test all your data. Note: you do notneed to compile again. Once the program compiles correctly once, it can beexecuted many times. You only need to compile again if you make changes tothe code.

    4 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Hours Rate Pay (hand calculated) Pay (program result)

    Christie_434242_LM 2/14/06 1:49 PM Page 4

  • Task #3 Debugging a Java Program

    1. Copy the file SalesTax.java (see code listing 1.2) from www.aw.com/cssupportor as directed by your instructor.

    2. Open the file in your IDE or text editor as directed by your instructor. This filecontains a simple Java program that contains errors. Compile the program. Youshould get a listing of syntax errors. Correct all the syntax errors, you maywant to recompile after you fix some of the errors.

    3. When all syntax errors are corrected, the program should compile. As in theprevious exercise, you need to develop some test data. Use the chart below torecord your test data and results when calculated by hand.

    4. Execute the program using your test data and recording the results. If the outputof the program is different from what you calculated, this usually indicates alogic error. Examine the program and correct logic error. Compile the programand execute using the test data again. Repeat until all output matches what isexpected.

    Chapter 1 Lab Algorithms, Errors, and Testing 5

    Item Price Tax Total (calculated) Total (output)

    Christie_434242_LM 2/14/06 1:49 PM Page 5

  • 6 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Code Listing 1.1 (Pay.java)

    //This program calculates the users gross pay

    import java.util.Scanner; //to be able to read from the keyboard

    public class Pay

    {

    public static void main(String [] args)

    {

    //create a Scanner object to read from the keyboard

    Scanner keyboard = new Scanner(System.in);

    //identifier declarations

    double hours; //number of hours worked

    double rate; //hourly pay rate

    double pay; //gross pay

    //display prompts and get input

    System.out.print("How many hours did you work? ");

    hours = keyboard.nextDouble();

    System.out.print("How much do you get paid per hour? ");

    rate = keyboard.nextDouble();

    //calculations

    if(hours

  • Chapter 1 Lab Algorithms, Errors, and Testing 7

    Code Listing 1.2 (SalesTax.java)

    //This program calculates the total price which includes sales //tax

    import java.util.Scanner;

    public class SalesTax

    {

    public static void main(String[] args)

    {

    //identifier declarations

    final double TAX_RATE = 0.055;

    double price;

    double tax

    double total;

    String item;

    //create a Scanner object to read from the keyboard

    Scanner keyboard = new Scanner(System.in);

    //display prompts and get input

    System.out.print("Item description: ");

    item = keyboard.nextLine();

    System.out.print("Item price: $");

    price = keyboard.nextDouble();

    //calculations

    tax = price + TAX_RATE;

    total = price * tax;

    //display results

    System.out.print(item + " $");

    System.out.println(price);

    System.out.print("Tax $");

    System.out.println(tax);

    System.out.print("Total $");

    System.out.println(total);

    }

    }

    Christie_434242_LM 2/14/06 1:49 PM Page 7

  • Christie_434242_LM 2/14/06 1:49 PM Page 8

  • Chapter 2 LabJava Fundamentals

    Objectives Write arithmetic expressions to accomplish a task Use casting to convert between primitive types Use a value-returning library method and a library constant Use string methods to manipulate string data Communicate with the user by using the Scanner class or dialog boxes Create a program from scratch by translating a pseudocode algorithm Be able to document a program

    Introduction

    This lab is designed to give you practice with some of the basics in Java. We will con-tinue ideas from lab 1 by correcting logic errors while looking at mathematical formu-las in Java. We will explore the difference between integer division and division onyour calculator as well as reviewing the order of operations.

    We will also learn how to use mathematical formulas that are preprogrammed inJava. On your calculator there are buttons to be able to do certain operations, such asraise a number to a power or use the number pi. Similarly, in Java, we will have pro-grams that are available for our use that will also do these operations. Mathematicaloperations that can be performed with the touch of a button on a calculator are alsoavailable in the Math class. We will learn how to use a Math class method to cube theradius in the formula for finding the volume of a sphere.

    This lab also introduces communicating with the user. We have already seen howconsole input and output work in lab 1. We will now need to learn how to programuser input, by investigating the lines of code that we need to add in order to use theScanner class. We will also learn the method call needed for output.

    Alternately, you may use dialog boxes for communicating with the user. An intro-duction to graphical user interface (GUI) programming is explored using theJOptionPane class.

    The String class is introduced and we will use some of the available methods toprepare you for string processing.

    Christie_434242_LM 2/14/06 1:49 PM Page 9

  • We will bring everything we have learned together by creating a program from analgorithm. Finally, you will document the program by adding comments. Commentsare not read by the computer, they are for use by the programmer. They are to help aprogrammer document what the program does and how it accomplishes it. This is veryimportant when a programmer needs to modify code that is written by another person.

    10 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 10

  • Task #1 Correcting Logic Errors in Formulas

    1. Download the file NumericTypes.java (see code listing 2.1) fromwww.aw.com/cssupport or as directed by your instructor.

    2. Compile the source file, run the program, and observe the output. Some of theoutput is incorrect. You need to correct logic errors in the average formulaand the temperature conversion formula. The logic errors could be due to con-version between data types, order of operations, or formula problems. The nec-essary formulas are

    3. Each time you make changes to the program code, you must compile again forthe changes to take effect before running the program again.

    4. Make sure that the output makes sense before you continue. The average of 95and 100 should be 97.5 and the temperature that water boils is 100 degreesCelsius.

    C = 59(F - 32)average =score1 + score2numberOfScores

    Chapter 2 Lab Java Fundamentals 11

    Christie_434242_LM 2/14/06 1:49 PM Page 11

  • Task #2 Using the Scanner Class for User Input

    1. Add an import statement above the class declaration to make the Scanner classavailable to your program.

    2. In the main method, create a Scanner object and connect it to the System.inobject.

    3. Prompt the user to enter his/her first name.

    4. Read the name from the keyboard using the nextLine method, and store it intoa variable called firstName (you will need to declare any variables you use).

    5. Prompt the user to enter his/her last name.

    6. Read the name from the keyboard and store it in a variable called lastName.

    7. Concatenate the firstName and lastName with a space between them andstore the result in a variable called fullName.

    8. Print out the fullName.

    9. Compile, debug, and run, using your name as test data.

    10. Since we are adding on to the same program, each time we run the program wewill get the output from the previous tasks before the output of the current task.

    12 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 12

  • Task #2 (Alternate) Using Dialog Boxes for User Input

    1. Add an import statement above the class declaration to make the JOptionPaneclass available to your program.

    2. In the main method, prompt the user to enter his/her first name by displayingan input dialog box and storing the user input in a variable called firstName(you will need to declare any variables you use).

    3. Prompt the user to enter his/her last name by displaying an input dialog boxand storing the user input in a variable called lastName.

    4. Concatenate the firstName and lastName with a space between them andstore the result in a variable called fullName.

    5. Display the fullName using a message dialog box.

    6. Compile, debug, and run, using your name as test data.

    7. Since we are adding on to the same program, each time we run the program wewill get the output from the previous tasks before the output of the current task.

    Chapter 2 Lab Java Fundamentals 13

    Christie_434242_LM 2/14/06 1:49 PM Page 13

  • Task #3 Working with Strings

    1. Use the charAt method to get the first character in firstName and store it ina variable called firstInitial (you will need to declare any variables thatyou use).

    2. Print out the users first initial.

    3. Use the toUpperCase method to change the fullName to all capitals andstore it back into the fullName variable

    4. Add a line that prints out the value of fullName and how many characters(including the space) are in the string stored in fullName (use the methodlength to obtain that information).

    5. Compile, debug, and run. The new output added on after the output from theprevious tasks should have your initials and your full name in all capital letters.

    14 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 14

  • Task #4 Using Predefined Math Functions

    1. Add a line that prompts the user to enter the diameter of a sphere.

    2. Read in and store the number into a variable called diameter (you will need todeclare any variables that you use).

    3. The diameter is twice as long as the radius, so calculate and store the radius inan appropriately named variable.

    4. The formula for the volume of a sphere is

    Convert the formula to Java and add a line which calculates and stores thevalue of volume in an appropriately named variable. Use Math.PI for andMath.pow to cube the radius.

    5. Print your results to the screen with an appropriate message.

    6. Compile, debug, and run using the following test data and record the results.

    p

    V = 43pr3

    Chapter 2 Lab Java Fundamentals 15

    Diameter Volume (hand calculated) Volume (resulting output)

    2

    25.4

    875,000

    Christie_434242_LM 2/14/06 1:49 PM Page 15

  • Task #5 Create a program from scratch

    In this task the student will create a new program that calculates gas mileage in milesper gallon. The student will use string expressions, assignment statements, input andoutput statements to communicate with the user.

    1. Create a new file in your IDE or text editor.

    2. Create the shell for your first program by entering:public class Mileage{

    public static void main(String[] args){

    // add your declaration and code here}

    }

    3. Save the file as Mileage.java.

    4. Translate the algorithm below into Java. Dont forget to declare variablesbefore they are used. Each variable must be one word only (no spaces).

    Print a line indicating this program will calculate mileagePrint prompt to user asking for miles drivenRead in miles drivenPrint prompt to user asking for gallons usedRead in gallons usedCalculate miles per gallon by dividing miles driven by gallons usedPrint miles per gallon along with appropriate labels

    5. Compile the program and debug, repeating until it compiles successfully.

    6. Run the program and test it using the following sets of data and record theresults:

    16 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Miles driven Gallons used Miles per gallon Miles per gallon(hand calculated) (resulting output)

    2000 100

    500 25.5

    241.5 10

    100 0

    7. The last set of data caused the computer to divide 100 by 0, which resulted inwhat is called a runtime error. Notice that runtime can occur on programswhich compile and run on many other sets of data. This emphasizes the need tothoroughly test you program with all possible kinds of data.

    Christie_434242_LM 2/14/06 1:49 PM Page 16

  • Task #6 Documenting a Java Program

    1. Compare the code listings of NumericTypes.java with Mileage.java. You willsee that NumericTypes.java has lines which have information about what theprogram is doing. These lines are called comments and are designated by the// at the beginning of the line. Any comment that starts with /** and endswith */ is considered a documentation comment. These are typically writtenjust before a class header, giving a brief description of the class. They are alsoused for documenting methods in the same way.

    2. Write a documentation comment at the top of the program which indicates thepurpose of the program, your name, and todays date.

    3. Add comment lines after each variable declaration, indicating what each vari-able represents.

    4. Add comment lines for each section of the program, indicating what is done inthat section.

    5. Finally add a comment line indicating the purpose of the calculation.

    Chapter 2 Lab Java Fundamentals 17

    Christie_434242_LM 2/14/06 1:49 PM Page 17

  • Code Listing 2.1 (NumericTypes.java)

    /**This program demonstrates how numeric types and operators behave

    */

    //TASK #2 Add import statement here to use the Scanner class

    //TASK #2 (Alternate) Add import statment to use JOptionPane//class

    public class NumericTypes

    {

    public static void main (String [] args)

    {

    //TASK #2 Create a Scanner object here

    //(not used for alternate)

    //identifier declarations

    final int NUMBER = 2 ; // number of scores

    final int SCORE1 = 100; // first test score

    final int SCORE2 = 95; // second test score

    final int BOILING_IN_F = 212; // freezing temperature

    int fToC; // temperature in Celsius

    double average; // arithmetic average

    String output; // line of output to print out

    //TASK #2 declare variables used here

    //TASK #3 declare variables used here

    //TASK #4 declare variables used here

    // Find an arithmetic average

    average = SCORE1 + SCORE2 / NUMBER;

    output = SCORE1 + " and " + SCORE2 +

    " have an average of " + average;

    System.out.println(output);

    // Convert Fahrenheit temperatures to Celsius

    fToC = 5/9 * (BOILING_IN_F - 32);

    output = BOILING_IN_F + " in Fahrenheit is " + fToC

    + " in Celsius.";

    Code Listing 2.1 continued on next page.

    18 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 18

  • System.out.println(output);

    System.out.println(); // to leave a blank line

    // ADD LINES FOR TASK #2 HERE

    // prompt the user for first name

    // read the users first name

    // prompt the user for last name

    // read the users last name

    // concatenate the users first and last names

    // print out the users full name

    System.out.println(); // to leave a blank line

    // ADD LINES FOR TASK #3 HERE

    // get the first character from the users first name

    // print out the users first initial

    // convert the users full name to all capital letters

    // print out the users full name in all capital

    // letters and the number of characters in it

    System.out.println(); // to leave a blank line

    // ADD LINES FOR TASK #4 HERE

    // prompt the user for a diameter of a sphere

    // read the diameter

    // calculate the radius

    // calculate the volume

    // print out the volume

    }

    }

    Chapter 2 Lab Java Fundamentals 19

    Christie_434242_LM 2/14/06 1:49 PM Page 19

  • Christie_434242_LM 2/14/06 1:49 PM Page 20

  • Chapter 3 LabSelection Control Structures

    Objectives Be able to construct boolean expressions to evaluate a given condition Be able to compare Strings Be able to use a flag Be able to construct if and if-else-if statements to perform a specific task Be able to construct a switch statement Be able to format numbers

    Introduction

    Up to this point, all the programs you have had a sequential control structure. Thismeans that all statements are executed in order, one after another. Sometimes we needto let the computer make decisions, based on the data. A selection control structureallows the computer to select which statement to execute.

    In order to have the computer make a decision, it needs to do a comparison. So wewill work with writing boolean expressions. Boolean expressions use relational opera-tors and logical operators to create a condition that can be evaluated as true or false.

    Once we have a condition, we can conditionally execute statements. This meansthat there are statements in the program that may or may not be executed, dependingon the condition.

    We can also chain conditional statements together to allow the computer to choosefrom several courses of action. We will explore this using nested if-else statements aswell as a switch statement.

    In this lab, we will be editing a pizza ordering program. It creates a Pizza object tothe specifications that the user desires. It walks the user through ordering, giving theuser choices, which the program then uses to decide how to make the pizza and howmuch the cost of the pizza will be. The user will also receive a $2.00 discount ifhis/her name is Mike or Diane.

    Christie_434242_LM 2/14/06 1:49 PM Page 21

  • Task #1 The if Statement, Comparing Strings, and Flags

    1. Copy the file PizzaOrder.java (see code listing 3.1) from www.aw.com/cssup-port or as directed by your instructor.

    2. Compile and run PizzaOrder.java. You will be able to make selections, but atthis point, you will always get a Hand-tossed pizza at a base cost of $12.99 nomatter what you select, but you will be able to choose toppings, and theyshould add into the price correctly. You will also notice that the output does notlook like money. So we need to edit PizzaOrder.java to complete the programso that it works correctly.

    3. Construct a simple if statement. The condition will compare the String input bythe user as his/her first name with the first names of the owners, Mike andDiane. Be sure that the comparison is not case sensitive.

    4. If the user has either first name, set the discount flag to true. This will notaffect the price at this point yet.

    22 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 22

  • Task #2 The if-else-if Statement

    1. Write an if-else-if statement that lets the computer choose which statements toexecute by the user input size (10, 12, 14, or 16). For each option, the costneeds to be set to the appropriate amount.

    2. The default else of the above if-else-if statement should print a statement thatthe user input was not one of the choices, so a 12 inch pizza will be made. Itshould also set the size to 12 and the cost to 12.99.

    3. Compile, debug, and run. You should now be able to get correct output for sizeand price (it will still have Hand-tossed crust, the output wont look like money,and no discount will be applied yet). Run your program multiple times orderinga 10, 12, 14, 16, and 17 inch pizza.

    Chapter 3 Lab Selection Control Structures 23

    Christie_434242_LM 2/14/06 1:49 PM Page 23

  • Task #3 Switch Statement

    1. Write a switch statement that compares the users choice with the appropriatecharacters (make sure that both capital letters and small letters will work).

    2. Each case will assign the appropriate string indicating crust type to the crustvariable.

    3. The default case will print a statement that the user input was not one of thechoices, so a Hand-tossed crust will be made.

    4. Compile, debug, and run. You should now be able to get crust types other thanHand-tossed. Run your program multiple times to make sure all cases of theswitch statement operate correctly.

    24 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 24

  • Task #4 Using a Flag as a Condition

    1. Write an if statement that uses the flag as the condition. Remember that theflag is a Boolean variable, therefore is true or false. It does not have to be com-pared to anything.

    2. The body of the if statement should contain two statements:a) A statement that prints a message indicating that the user is eligible for a

    $2.00 discount.b) A statement that reduces the variable cost by 2.

    3. Compile, debug, and run. Test your program using the owners names (bothcapitalized and not) as well as a different name. The discount should be cor-rectly at this time.

    Chapter 3 Lab Selection Control Structures 25

    Christie_434242_LM 2/14/06 1:49 PM Page 25

  • Task #5 Formatting Numbers

    1. Add an import statement to use the DecimalFormat class as indicated above theclass declaration.

    2. Create a DecimalFormat object that always shows 2 decimal places.

    3. Edit the appropriate lines in the main method so that any monetary output has 2decimal places.

    4. Compile, debug, and run. Your output should be completely correct at this time,and numeric output should look like money.

    26 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 26

  • Code Listing 3.1 (PizzaOrder.java)

    /**This program allows the user to order a pizza

    */

    import java.util.Scanner;

    import java.text.DecimalFormat;

    public class PizzaOrder

    {

    public static void main (String [] args)

    {

    //TASK #5 Create a DecimalFormat object with 2 decimal

    //places

    //Create a Scanner object to read input

    Scanner keyboard = new Scanner (System.in);

    String firstName; //users first name

    boolean discount = false; //flag, true if user is

    //eligible for discount

    int inches; //size of the pizza

    char crustType; //code for type of crust

    String crust = "Hand-tossed"; //name of crust

    double cost = 12.99; //cost of the pizza

    final double TAX_RATE = .08; //sales tax rate

    double tax; //amount of tax

    char choice; //users choice

    String input; //user input

    String toppings = "Cheese "; //list of toppings

    int numberOfToppings = 0; //number of toppings

    //prompt user and get first name

    System.out.println("Welcome to Mike and Dianes Pizza");

    System.out.print("Enter your first name: ");

    firstName = keyboard.nextLine();

    Code Listing 3.1 continued on next page.

    Chapter 3 Lab Selection Control Structures 27

    Christie_434242_LM 2/14/06 1:49 PM Page 27

  • //determine if user is eligible for discount by

    //having the same first name as one of the owners

    //ADD LINES HERE FOR TASK #1

    //prompt user and get pizza size choice

    System.out.println("Pizza Size (inches) Cost");

    System.out.println(" 10 $10.99);

    System.out.println(" 12 $12.99");

    System.out.println(" 14 $14.99");

    System.out.println(" 16 $16.99");

    System.out.println("What size pizza would you like?");

    System.out.print(

    "10, 12, 14, or 16 (enter the number only): ");

    inches = keyboard.nextInt();

    //set price and size of pizza ordered

    //ADD LINES HERE FOR TASK #2

    //consume the remaining newline character

    keyboard.nextLine();

    //prompt user and get crust choice

    System.out.println("What type of crust do you want? ");

    System.out.print("(H)Hand-tossed, (T) Thin-crust, or " +

    "(D) Deep-dish (enter H, T, or D): ");

    input = keyboard.nextLine();

    crustType = input.charAt(0);

    //set users crust choice on pizza ordered

    //ADD LINES FOR TASK #3

    //prompt user and get topping choices one at a time

    System.out.println("All pizzas come with cheese.");

    System.out.println("Additional toppings are $1.25 each,"

    + " choose from");

    System.out.println("Pepperoni, Sausage, Onion, Mushroom");

    Code Listing 3.1 continued on next page.

    28 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 28

  • //if topping is desired,

    //add to topping list and number of toppings

    System.out.print("Do you want Pepperoni? (Y/N): ");

    input = keyboard.nextLine();

    choice = input.charAt(0);

    if (choice == Y || choice == y)

    {

    numberOfToppings += 1;

    toppings = toppings + "Pepperoni ";

    }

    System.out.print("Do you want Sausage? (Y/N): ");

    input = keyboard.nextLine();

    choice = input.charAt(0);

    if (choice == Y || choice == y)

    {

    numberOfToppings += 1;

    toppings = toppings + "Sausage ";

    }

    System.out.print("Do you want Onion? (Y/N): ");

    input = keyboard.nextLine();

    choice = input.charAt(0);

    if (choice == Y || choice == y)

    {

    numberOfToppings += 1;

    toppings = toppings + "Onion ";

    }

    System.out.print("Do you want Mushroom? (Y/N): ");

    input = keyboard.nextLine();

    choice = input.charAt(0);

    if (choice == Y || choice == y)

    {

    numberOfToppings += 1;

    toppings = toppings + "Mushroom ";

    }

    //add additional toppings cost to cost of pizza

    Code Listing 3.1 continued on next page.

    Chapter 3 Lab Selection Control Structures 29

    Christie_434242_LM 2/14/06 1:49 PM Page 29

  • cost = cost + (1.25*numberOfToppings);

    //display order confirmation

    System.out.println();

    System.out.println("Your order is as follows: ");

    System.out.println(inches + " inch pizza");

    System.out.println(crust + " crust");

    System.out.println(toppings);

    //apply discount if user is eligible

    //ADD LINES FOR TASK #4 HERE

    //EDIT PROGRAM FOR TASK #5

    //SO ALL MONEY OUTPUT APPEARS WITH 2 DECIMAL PLACES

    System.out.println("The cost of your order is: $" + cost);

    //calculate and display tax and total cost

    tax = cost * TAX_RATE;

    System.out.println("The tax is: $" + tax);

    System.out.println("The total due is: $" + (tax+cost));

    System.out.println(

    "Your order will be ready for pickup in 30 minutes.");

    }

    }

    30 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 30

  • Chapter 4 LabLoops and Files

    Objectives Be able to convert an algorithm using control structures into Java Be able to write a while loop Be able to write an do-while loop Be able to write a for loop Be able to use the Random class to generate random numbers Be able to use file streams for I/O Be able to write a loop that reads until end of file Be able to implement an accumulator and a counter

    Introduction

    This is a simulation of rolling dice. Actual results approach theory only when the sam-ple size is large. So we will need to repeat rolling the dice a large number of times (wewill use 10,000). The theoretical probability of rolling doubles of a specific number is1 out of 36 or approximately 278 out of 10,000 times that you roll the pair of dice.Since this is a simulation, the numbers will vary a little each time you run it.

    Check out how to use the random number generator (introduced in section 4.11 ofthe text) to get a number between 1 and 6 to create the simulation.

    We will continue to use control structures that we have already learned, whileexploring control structures used for repetition. We shall also continue our work withalgorithms, translating a given algorithm to java in order to complete our program. Wewill start with a while loop, then use the same program, changing the while loop to ado-while loop, and then a for loop.

    We will be introduced to file input and output. We will read a file, line by line, con-verting each line into a number. We will then use the numbers to calculate the meanand standard deviation.

    First we will learn how to use file output to get results printed to a file. Next wewill use file input to read the numbers from a file and calculate the mean. Finally, wewill see that when the file is closed, and then reopened, we will start reading from thetop of the file again so that we can calculate the standard deviation.

    Christie_434242_LM 2/14/06 1:49 PM Page 31

  • Task #1 While loop

    1. Copy the file DiceSimulation.java (see code listing 4.1) fromwww.aw.com/cssupport or as directed by your instructor. DiceSimulation.javais incomplete. Since there is a large part of the program missing, the output willbe incorrect if you run DiceSimulation.java.

    2. I have declared all the variables. You need to add code to simulate rolling thedice and keeping track of the doubles. Convert the algorithm below to Java andplace it in the main method after the variable declarations, but before the outputstatements. You will be using several control structures: a while loop and an if-else-if statement nested inside another if statement. Use the indenting of thealgorithm to help you decide what is included in the loop, what is included inthe if statement, and what is included in the nested if-else-if statement.

    3. To roll the dice, use the nextInt method of the random number generator togenerate an integer from 1 to 6.

    Repeat while the number of dice rolls are less than the number of times the dice shouldbe rolled.

    Get the value of the first die by rolling the first dieGet the value of the second die by rolling the second dieIf the value of the first die is the same as the value of the second die

    If value of first die is 1Increment the number of times snake eyes were rolled

    Else if value of the first die is 2Increment the number of times twos were rolled

    Else if value of the first die is 3Increment the number of times threes were rolled

    Else if value of the first die is 4Increment the number of times fours were rolledElse if value of the first die is 5

    Increment the number of times fives were rolledElse if value of the first die is 6

    Increment the number of times sixes were rolledIncrement the number of times the dice were rolled

    4. Compile and run. You should get numbers that are somewhat close to 278 foreach of the different pairs of doubles. Run it several times. You should get dif-ferent results than the first time, but again it should be somewhat close to 278.

    32 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 32

  • Task #2 Using Other Types of Loops

    1. Change the while loop to a do-while loop. Compile and run. You should get thesame results.

    2. Change the do loop to a for loop. Compile and run. You should get the sameresults.

    Chapter 4 Lab Loops and Files 33

    Christie_434242_LM 2/14/06 1:49 PM Page 33

  • Task #3 Writing Output to a File

    1. Copy the files StatsDemo.java (see code listing 4.2) and Numbers.txt fromwww.aw.com/cssupport or as directed by your instructor.

    2. First we will write output to a file:a) Create a FileWriter object passing it the filename Results.txt (Dont for-

    get the needed import statement).b) Create a PrintWriter object passing it the FileWriter object.c) Since you are using a FileWriter object, add a throws clause to the main

    method header.d) Print the mean and standard deviation to the output file using a three deci-

    mal format, labeling each.e) Close the output file.

    3. Compile, debug, and run. You will need to type in the filename Numbers.txt.You should get no output to the console, but running the program will create afile called Results.txt with your output. The output you should get at this pointis: mean = 0.000, standard deviation = 0.000. This is not the correct mean orstandard deviation for the data, but we will fix this in the next tasks.

    34 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 34

  • Task #4 Calculating the Mean

    1. Now we need to add lines to allow us to read from the input file and calculatethe mean. a) Create a FileReader object passing it the filename.b) Create a BufferedReader object passing it the FileReader object.

    2. Write a priming read to read the first line of the file.

    3. Write a loop that continues until you are at the end of the file.

    4. The body of the loop will a) convert the line into a double value and add the value to the accumulatorb) increment the counterc) read a new line from the file

    5. When the program exits the loop close the input file.

    6. Calculate and store the mean. The mean is calculated by dividing the accumula-tor by the counter.

    7. Compile, debug, and run. You should now get a mean of 77.444, but the stan-dard deviation will still be 0.000.

    Chapter 4 Lab Loops and Files 35

    Christie_434242_LM 2/14/06 1:49 PM Page 35

  • Task #5 Calculating the Standard Deviation

    1. We need to reconnect to the file so that we can start reading from the top again.a) Create a FileReader object passing it the filename.b) Create a BufferedReader object passing it the FileReader object.

    2. Reinitialize sum and count to 0.

    3. Write a priming read to read the first line of the file.

    4. Write a loop that continues until you are at the end of the file.

    5. The body of the loop will a) convert the line into a double value and subtract the mean, store the result

    in differenceb) add the square of the difference to the accumulatorc) increment the counterd) read a new line from the file

    6. When the program exits the loop close the input file.

    7. The variance is calculated by dividing the accumulator (sum of the squares ofthe difference) by the counter. Calculate the standard deviation by taking thesquare root of the variance (Use Math.sqrt ( ) to take the square root).

    8. Compile, debug, and run. You should get a mean of 77.444 and standard devia-tion of 10.021.

    36 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 36

  • Code Listing 4.1 (DiceSimulation.java)

    /**This class simulates rolling a pair of dice 10,000 times andcounts the number of times doubles of are rolled for each differ-ent pair of doubles.

    */

    import java.util.Random; //to use the random number

    //generator

    public class DiceSimulation

    {

    public static void main(String[] args)

    {

    final int NUMBER = 10000; //the number of times to

    //roll the dice

    //a random number generator used in simulating

    //rolling a dice

    Random generator = new Random();

    int die1Value; // number of spots on the first

    // die

    int die2Value; // number of spots on the second

    // die

    int count = 0; // number of times the dice were

    // rolled

    int snakeEyes = 0; // number of times snake eyes is

    // rolled

    int twos = 0; // number of times double

    // two is rolled

    int threes = 0; // number of times double three

    // is rolled

    int fours = 0; // number of times double four

    // is rolled

    int fives = 0; // number of times double five

    // is rolled

    int sixes = 0; // number of times double six is

    // rolled

    Code Listing 4.1 continued on next page.

    Chapter 4 Lab Loops and Files 37

    Christie_434242_LM 2/14/06 1:49 PM Page 37

  • //ENTER YOUR CODE FOR THE ALGORITHM HERE

    System.out.println ("You rolled snake eyes " +

    snakeEyes + " out of " + count + " rolls.");

    System.out.println ("You rolled double twos " + twos +

    " out of " + count + " rolls.");

    System.out.println ("You rolled double threes " +

    threes + " out of " + count + " rolls.");

    System.out.println ("You rolled double fours " + fours

    + " out of " + count + " rolls.");

    System.out.println ("You rolled double fives " + fives

    + " out of " + count + " rolls.");

    System.out.println ("You rolled double sixes " + sixes

    + " out of " + count + " rolls.");

    }

    }

    38 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 38

  • Code Listing 4.2 (StatsDemo.java)

    import java.text.DecimalFormat; //for number formatting

    import java.util.Scanner; //for keyboard input

    //ADD AN IMPORT STATEMENT HERE //for using files

    public class StatsDemo

    {

    public static void main(String [] args) //ADD A THROWS

    //CLAUSE HERE

    {

    double sum = 0; //the sum of the numbers

    int count = 0; //the number of numbers added

    double mean = 0; //the average of the numbers

    double stdDev = 0; //the standard deviation of the

    //numbers

    String line; //a line from the file

    double difference; //difference between the value

    //and the mean

    //create an object of type Decimal Format

    DecimalFormat threeDecimals =

    new DecimalFormat("0.000");

    //create an object of type Scanner

    Scanner keyboard = new Scanner (System.in);

    String filename; // the user input file name

    //Prompt the user and read in the file name

    System.out.println(

    "This program calculates statistics"

    + "on a file containing a series of numbers");

    System.out.print("Enter the file name: ");

    filename = keyboard.nextLine();

    //ADD LINES FOR TASK #4 HERE

    //Create a FileReader object passing it the filename

    //Create a BufferedReader object passing it the

    //FileReader object.

    Code Listing 4.2 continued on next page.

    Chapter 4 Lab Loops and Files 39

    Christie_434242_LM 2/14/06 1:49 PM Page 39

  • //priming read to read the first line of the file

    //create a loop that continues until you are at the

    //end of the file

    //convert the line to double value, add the value to

    //the sum

    //increment the counter

    //read a new line from the file

    //close the input file

    //store the calculated mean

    //ADD LINES FOR TASK #5 HERE

    //create a FileReader object passing it the filename

    //create a BufferedReader object passing it the

    //FileReader object.

    //reinitialize the sum of the numbers

    //reinitialize the number of numbers added

    //priming read to read the first line of the file

    //loop that continues until you are at the end of the

    //file

    //convert the line into a double value and subtract

    //the mean

    //add the square of the difference to the sum

    //increment the counter

    //read a new line from the file

    //close the input file

    //store the calculated standard deviation

    //ADD LINES FOR TASK #3 HERE

    //create an object of type FileWriter using

    //"Results.txt"

    //create an object of PrintWriter passing it the

    //FileWriter object.

    //print the results to the output file

    //close the output file

    }

    }

    40 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 40

  • Chapter 5 LabMethods

    ObjectivesBe able to write methodsBe able to call methodsBe able to write javadoc commentsBe able to create HTML documentation for our Java class using javadoc

    Introduction

    Methods are commonly used to break a problem down into small manageable pieces.A large task can be broken down into smaller tasks (methods) that contain the detailsof how to complete that small task. The larger problem is then solved by implementingthe smaller tasks (calling the methods) in the correct order.

    This also allows for efficiencies, since the method can be called as many times asneeded without rewriting the code each time.

    Finally, we will use documentation comments for each method, and generateHTML documents similar to the Java APIs that we have seen.

    Christie_434242_LM 2/14/06 1:49 PM Page 41

  • Task #1 void Methods

    1. Copy the file Geometry.java (code listing 5.1) from www.aw.com/cssupport oras directed by your instructor. This program will compile, but when you run it,it doesnt appear to do anything except wait. That is because it is waiting foruser input, but the user doesnt have the menu to choose from yet. We will needto create this.

    2. Above the main method, but in the Geometry class, create a static methodcalled printMenu that has no parameter list and does not return a value. It willsimply print out instructions for the user with a menu of options for the user tochoose from. The menu should appear to the user as:

    This is a geometry calculatorChoose what you would like to calculate1. Find the area of a circle2. Find the area of a rectangle3. Find the area of a triangle4. Find the circumference of a circle5. Find the perimeter of a rectangle6. Find the perimeter of a triangleEnter the number of your choice:

    3. Add a line in the main method that calls the printMenu method as indicated bythe comments.

    4. Compile, debug, and run. You should be able to choose any option, but you willalways get 0 for the answer. We will fix this in the next task.

    42 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 42

  • Task #2 Value-Returning Methods

    1. Write a static method called circleArea that takes in the radius of the circle andreturns the area using the formula

    2. Write a static method called rectangleArea that takes in the length and widthof the rectangle and returns the area using the formula

    3. Write a static method called triangleArea that takes in the base and height ofthe triangle and returns the area using the formula

    4. Write a static method called circleCircumference that takes in the radius of thecircle and returns the circumference using the formula

    5. Write a static method called rectanglePerimeter that takes in the length andthe width of the rectangle and returns the perimeter of the rectangle using theformula

    6. Write a static method called trianglePerimeter that takes in the lengths of thethree sides of the triangle and returns the perimeter of the triangle which is cal-culated by adding up the three sides.

    P = 2l + 2w.

    C = 2pr.

    A = 12bh.

    A = lw.

    A = pr2.

    Chapter 5 Lab Methods 43

    Christie_434242_LM 2/14/06 1:49 PM Page 43

  • Task #3 Calling Methods

    1. Add lines in the main method in the GeometryDemo class which will call thesemethods. The comments indicate where to place the method calls.

    2. Below, write some sample data and hand calculated results for you to testall 6 menu items.

    3. Compile, debug, and run. Test out the program using your sample data.

    44 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 44

  • Task #4 Java Documentation

    1. Write javadoc comments for each of the 7 static methods that you just wrote.They should includea) A one line summary of what the method does.a) A description of what the program requires to operate and what the result of

    that operation is.a) @param listing and describing each of the parameters in the parameter list

    (if any).a) @return describing the information that is returned to the calling statement

    (if any).

    2. Generate the documentation. Check the method summary and the method detailsto ensure your comments were put into the Java Documentation correctly.

    Chapter 5 Lab Methods 45

    Christie_434242_LM 2/14/06 1:49 PM Page 45

  • Code Listing 5.1 (Geometry.java)

    import java.util.Scanner;

    /**This program demonstrates static methods

    */

    public class Geometry

    {

    public static void main (String [] args)

    {

    int choice; //the users choice

    double value = 0; //the value returned from the method

    char letter; //the Y or N from the users decision

    //to exit

    double radius; //the radius of the circle

    double length; //the length of the rectangle

    double width; //the width of the rectangle

    double height; //the height of the triangle

    double base; //the base of the triangle

    double side1; //the first side of the triangle

    double side2; //the second side of the triangle

    double side3; //the third side of the triangle

    //create a scanner object to read from the keyboard

    Scanner keyboard = new Scanner (System.in);

    //do loop was chose to allow the menu to be displayed

    //first

    do

    {

    //call the printMenu method

    choice = keyboard.nextInt();

    switch (choice)

    {

    Code Listing 5.1 continued on next page.

    46 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 46

  • case 1:

    System.out.print(

    "Enter the radius of the circle: ");

    radius = keyboard.nextDouble();

    //call the circleArea method and

    //store the result

    //in the value

    System.out.println(

    "The area of the circle is " + value);

    break;

    case 2:

    System.out.print(

    "Enter the length of the rectangle: ");

    length = keyboard.nextDouble();

    System.out.print(

    "Enter the width of the rectangle: ");

    width = keyboard.nextDouble();

    //call the rectangleArea method and store

    //the result in the value

    System.out.println(

    "The area of the rectangle is " + value);

    break;

    case 3:

    System.out.print(

    "Enter the height of the triangle: ");

    height = keyboard.nextDouble();

    System.out.print(

    "Enter the base of the triangle: ");

    base = keyboard.nextDouble();

    //call the triangleArea method and store

    //the result in the value

    System.out.println(

    "The area of the triangle is " + value);

    break;

    Code Listing 5.1 continued on next page.

    Chapter 5 Lab Methods 47

    Christie_434242_LM 2/14/06 1:49 PM Page 47

  • case 4:

    System.out.print(

    "Enter the radius of the circle: ");

    radius = keyboard.nextDouble();

    //call the circumference method and

    //store the result in the value

    System.out.println(

    "The circumference of the circle is " + value);

    break;

    case 5:

    System.out.print(

    "Enter the length of the rectangle: ");

    length = keyboard.nextDouble();

    System.out.print(

    "Enter the width of the rectangle: ");

    width = keyboard.nextDouble();

    //call the perimeter method and store the result

    //in the value

    System.out.println(

    "The perimeter of the rectangle is " + value);

    break;

    case 6:

    System.out.print("Enter the length of side 1 " +

    "of the triangle: ");

    side1 = keyboard.nextDouble();

    System.out.print("Enter the length of side 2 " +

    "of the triangle: ");

    side2 = keyboard.nextDouble();

    System.out.print("Enter the length of side 3 " +

    "of the triangle: ");

    side3 = keyboard.nextDouble();

    //call the perimeter method and store the result

    //in the value

    System.out.println("The perimeter of the " +

    "triangle is " + value);

    break;

    default:

    Code Listing 5.1 continued on next page.

    48 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 48

  • System.out.println(

    "You did not enter a valid choice.");

    }

    //consumes the new line character after the number

    keyboard.nextLine();

    System.out.println("Do you want to exit the program " +

    "(Y/N)?: ");

    String answer = keyboard.nextLine();

    letter = answer.charAt(0);

    }while (letter != Y && letter != y);

    }

    }

    Chapter 5 Lab Methods 49

    Christie_434242_LM 2/14/06 1:49 PM Page 49

  • Christie_434242_LM 2/14/06 1:49 PM Page 50

  • Chapter 6 LabClasses and Objects

    Objectives Be able to declare a new class Be able to write a constructor Be able to write instance methods that return a value Be able to write instance methods that take arguments Be able to instantiate an object Be able to use calls to instance methods to access and change the state of an

    object

    Introduction

    Everyone is familiar with a television. It is the object we are going to create in this lab.First we need a blueprint. All manufacturers have the same basic elements in the televi-sions they produce as well as many options. We are going to work with a few basicelements that are common to all televisions. Think about a television in general. It hasa brand name (i.e. it is made by a specific manufacturer). The television screen has aspecific size. It has some basic controls. There is a control to turn the power on andoff. There is a control to change the channel. There is also a control for the volume. Atany point in time, the televisions state can be described by how these controls are set.

    We will write the television class. Each object that is created from the televisionclass must be able to hold information about that instance of a television in fields. So atelevision object will have the following attributes:

    manufacturer. The manufacturer attribute will hold the brand name. Thiscannot change once the television is created, so will be a named constant.

    screenSize. The screenSize attribute will hold the size of the televisionscreen. This cannot change once the television has been created so will be anamed constant.

    powerOn. The powerOn attribute will hold the value true if the power is on,and false if the power is off.

    channel. The channel attribute will hold the value of the station that the tele-vision is showing.

    volume. The volume attribute will hold a number value representing the loud-ness (0 being no sound).

    Christie_434242_LM 2/14/06 1:49 PM Page 51

  • These attributes become fields in our class.The television object will also be able to control the state of its attributes. These

    controls become methods in our class. setChannel. The setChannel method will store the desired station in the

    channel field. power. The power method will toggle the power between on and off, changing

    the value stored in the powerOn field from true to false or from false to true. increaseVolume. The increaseVolume method will increase the value

    stored in the volume field by 1. decreaseVolume. The decreaseVolume method will decrease the value

    stored in the volume field by 1. getChannel. The getChannel method will return the value stored in the

    channel field. getVolume. The getVolume method will return the value stored in the volume

    field. getManufacturer. The getManufacturer method will return the constant

    value stored in the MANUFACTURER field. getScreenSize. The getScreenSize method will return the constant value

    stored in the SCREEN_SIZE field.

    We will also need a constructor method that will be used to create an instance of aTelevision.

    These ideas can be brought together to form a UML (Unified Modeling Language)diagram for this class as shown below.

    52 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    !

    !

    !

    !

    !

    !

    !

    -MANUFACTURER: String -SCREEN_SIZE: int -powerOn: boolean -channel: int -volume: int

    +Television(brand: String, size: int): +setChannel (station: int): void +power( ): void +increaseVolume( ): void +decreaseVolume( ): void +getChannel( ): int +getVolume( ): int +getManufacturer( ): String +getScreenSize( ): int

    + public private

    Data type returned

    Television

    Attributes or fields

    Class Name

    Methods

    Christie_434242_LM 2/14/06 1:49 PM Page 52

  • Task #1 Creating a New Class

    1. In a new file, create a class definition called Television.

    2. Put a program header (comments/documentation) at the top of the file // The purpose of this class is to model a television// Your name and todays date

    3. Declare the 2 constant fields listed in the UML diagram.

    4. Declare the 3 remaining fields listed in the UML diagram.

    5. Write a comment for each field indicating what it represents.

    6. Save this file as Television.java.

    7. Compile and debug. Do not run.

    Chapter 6 Lab Classes and Objects 53

    Christie_434242_LM 2/14/06 1:49 PM Page 53

  • Task #2 Writing a Constructor

    1. Create a constructor definition that has two parameters, a manufacturers brandand a screen size. These parameters will bring in information

    2. Inside the constructor, assign the values taken in from the parameters to thecorresponding fields.

    3. Initialize the powerOn field to false (power is off), the volume to 20, and thechannel to 2.

    4. Write comments describing the purpose of the constructor above the methodheader.

    5. Compile and debug. Do not run.

    54 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 54

  • Task #3 Methods

    1. Define accessor methods called getVolume, getChannel,getManufacturer, and getScreenSize that return the value of the cor-responding field.

    2. Define a mutator method called setChannel accepts a value to be stored inthe channel field.

    3. Define a mutator method called power that changes the state from true to falseor from false to true. This can be accomplished by using the NOT operator (!).If the boolean variable powerOn is true, then !powerOn is false and viceversa. Use the assignment statement

    powerOn = !powerOn;

    to change the state of powerOn and then store it back into powerOn (remem-ber assignment statements evaluate the right hand side first, then assign theresult to the left hand side variable.

    4. Define two mutator methods to change the volume. One method should becalled increaseVolume and will increase the volume by 1. The othermethod should be called decreaseVolume and will decrease the volume by1.

    5. Write javadoc comments above each method header.

    6. Compile and debug. Do not run.

    Chapter 6 Lab Classes and Objects 55

    Christie_434242_LM 2/14/06 1:49 PM Page 55

  • Task #4 Running the application

    1. You can only execute (run) a program that has a main method, so there is a dri-ver program that is already written to test out your Television class. Copythe file TelevisionDemo.java (see code listing 3.1) from www.aw.com/cssupportor as directed by your instructor. Make sure it is in the same directory asTelevision.java.

    2. Compile and run TelevisionDemo and follow the prompts.

    3. If your output matches the output below, Television.java is complete and cor-rect. You will not need to modify it further for this lab.

    OUTPUT (boldface is user input)

    A 55 inch Toshiba has been turned on.

    What channel do you want? 56

    Channel: 56 Volume: 21

    Too loud!! I am lowering the volume.

    Channel: 56 Volume: 15

    56 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 56

  • Task #5 Creating another instance of a Television

    1. Edit the TelevisionDemo.java file.

    2. Declare another Television object called portable.

    3. Instantiate portable to be a Sharp 19 inch television.

    4. Use a call to the power method to turn the power on.

    5. Use calls to the accessor methods to print what television was turned on.

    6. Use calls to the mutator methods to change the channel to the users prefer-ence and decrease the volume by two.

    7. Use calls to the accessor methods to print the changed state of the portable.

    8. Compile and debug this class.

    9. Run TelevisionDemo again.

    10. The output for task #5 will appear after the output from above, since we addedonto the bottom of the program. The output for task #5 is shown below.

    OUTPUT (boldface is user input)

    A 19 inch Sharp has been turned on.

    What channel do you want? 7

    Channel: 7 Volume: 18

    Chapter 6 Lab Classes and Objects 57

    Christie_434242_LM 2/14/06 1:49 PM Page 57

  • Code Listing 6.1 (TelevisionDemo.java)

    /** This class demonstrates the Television class*/

    import java.util.Scanner;

    public class TelevisionDemo

    {

    public static void main(String[] args)

    {

    //create a Scanner object to read from the keyboard

    Scanner keyboard = new Scanner (System.in);

    //declare variables

    int station; //the users channel choice

    //declare and instantiate a television object

    Television bigScreen = new Television("Toshiba", 55);

    //turn the power on

    bigScreen.power();

    //display the state of the television

    System.out.println("A " + bigScreen.getScreenSize() +

    bigScreen.getManufacturer() +

    " has been turned on.");

    //prompt the user for input and store into station

    System.out.print("What channel do you want? ");

    station = keyboard.nextInt();

    //change the channel on the television

    bigScreen.setChannel(station);

    //increase the volume of the television

    bigScreen.increaseVolume();

    //display the the current channel and volume of the

    //television

    System.out.println("Channel: " +

    bigScreen.getChannel() +

    " Volume: " + bigScreen.getVolume());

    Code Listing 6.1 continued on next page.

    58 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 58

  • System.out.println(

    "Too loud!! I am lowering the volume.");

    //decrease the volume of the television

    bigScreen.decreaseVolume();

    bigScreen.decreaseVolume();

    bigScreen.decreaseVolume();

    bigScreen.decreaseVolume();

    bigScreen.decreaseVolume();

    bigScreen.decreaseVolume();

    //display the current channel and volume of the

    //television

    System.out.println("Channel: " +

    bigScreen.getChannel() +

    " Volume: " + bigScreen.getVolume());

    System.out.println(); //for a blank line

    //HERE IS WHERE YOU DO TASK #5

    }

    }

    Chapter 6 Lab Classes and Objects 59

    Christie_434242_LM 2/14/06 1:49 PM Page 59

  • Christie_434242_LM 2/14/06 1:49 PM Page 60

  • Chapter 7 LabGUI Applications

    Objectives Be able to create a closeable window Be able to create panels containing buttons Be able to use different layouts Be able to handle button events

    Introduction

    In this lab, we will be creating a graphical user interface (GUI) to allow the user toselect a button that will change the color of the center panel and radio buttons that willchange the color of the text in the center panel. We will need to use a variety of Swingcomponents to accomplish this task.

    We will build two panels, a top panel containing three buttons and a bottom panelcontaining three radio buttons. Layouts will be used to add these panels to the windowin the desired positions. A label with instructions will also be added to the window.Listeners will be employed to handle the events desired by the user.

    Our final GUI should look like the following

    Christie_434242_LM 2/14/06 1:49 PM Page 61

  • Task #1 Creating a GUI

    1. Import the required Java libraries.

    2. Create a class called ColorFactory that inherits from JFrame.

    3. Create named constants for a width of 500 and height of 300 for the frame.

    4. Write a default constructor that does the followinga) Set the title of the window to Color Factory.b) Set the size of the window using the constants.c) Specify what happens when the close button is clicked.d) Get the content pane of the JFrame and set the layout manager to border

    layout.e) Call the method to build the top panel (to be written as directed below).f) Add the panel to the north part of the content pane. g) Call the method to build the bottom panel (to be written as directed below).h) Add this panel to the south part of the content pane.i) Create a label that contains the message Top buttons change the panel

    color and bottom radio buttons change the text color.j) Add this label to the center part of the content pane.

    62 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 62

  • Task #2 Writing Private Methods

    1. Write a private method that builds the top panel as followsa) Create a panel that contains three buttons, red, orange, and yellow. b) Use flow layout for the panel and set the background to be white. c) The buttons should be labeled with the color name and also appear in that

    color.d) Set the action command of each button to be the first letter of the color

    name. e) Add button listener that implements action listener for each button.

    2. Create a bottom panel in the same way as the top panel above, but use radiobuttons with the colors green, blue, and cyan.

    Chapter 7 Lab GUI Applications 63

    Christie_434242_LM 2/14/06 1:49 PM Page 63

  • Task #3 Writing Inner Classes

    1. Write a private inner class called ButtonListener that implementsActionListener. It should contain an actionPerformed method to handle the but-ton events. This event handler will handle all button events, so you must get theaction command of the event and write a decision structure to determine whichcolor to set the background of the content pane.

    2. Write another private inner class called RadioButtonListener, similar to Buttonlistener. It will handle all radio button events, so you will need to check thesource of the event and write a decision structure to determine which colorshould be used for the text of the message.

    64 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 64

  • Task #4 Running the GUI Program

    1. Write a main method that declares and creates one instance of a ColorFactory,then use the setVisible method to show it on the screen.

    Chapter 7 Lab GUI Applications 65

    Christie_434242_LM 2/14/06 1:49 PM Page 65

  • Christie_434242_LM 2/14/06 1:49 PM Page 66

  • Chapter 8 LabArrays

    Objectives Be able to declare and instantiate arrays Be able to fill an array using a for loop Be able to access and process data in an array Be able to write a sorting method Be able to use an array of objects

    Introduction

    Everyone is familiar with a list. We make shopping lists, to-do lists, assignment lists,birthday lists, etc. Notice that though there may be many items on the list, we call thelist by one name. That is the idea of the array, one name for a list of related items. Inthis lab, we will work with lists in the form of an array.

    It will start out simple with a list of numbers. We will learn how to process thecontents of an array. We will also explore sorting algorithms, using the selection sort.We will then move onto more complicated arrays, arrays that contain objects.

    Christie_434242_LM 2/14/06 1:49 PM Page 67

  • Task #1 Average Class

    Create a class called Average according to the UML diagram.

    This class will allow a user to enter 5 scores into an array. It will then rearrange thedata in descending order and calculate the mean for the data set.

    Attributes: data[]the array which will contain the scores meanthe arithmetic average of the scores

    Methods: Averagethe constructor. It will allocate memory for the array. Use a for

    loop to repeatedly display a prompt for the user which should indicate that usershould enter score number 1, score number 2, etc. Note: The computer startscounting with 0, but people start counting with 1, and your prompt shouldaccount for this. For example, when the user enters score number 1, it will bestored in indexed variable 0. The constructor will then call theselectionSort and the calculateMean methods.

    calculateMeanthis is a method that uses a for loop to access each scorein the array and add it to a running total. The total divided by the number ofscores (use the length of the array), and the result is stored into mean.

    toStringreturns a String containing data in descending order and themean.

    selectionSortthis method uses the selection sort algorithm to rearrangethe data set from highest to lowest.

    -data [ ] :int-mean: double

    +Average( ):+calculateMean( ): void+toString( ): String+selectionSort( ): void

    Average

    68 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 68

  • Task #2 Average Driver

    1. Create an AverageDriver class. This class only contains the main method.The main method should declare and instantiate an Average object. TheAverage object information should then be printed to the console.

    2. Compile, debug, and run the program. It should output the data set from highestto lowest and the mean. Compare the computers output to your hand calcula-tion using a calculator. If they are not the same, do not continue until you cor-rect your code.

    Chapter 8 Lab Arrays 69

    Christie_434242_LM 2/14/06 1:49 PM Page 69

  • Task #3 Arrays of Objects

    1. Copy the files Song.java (code listing 8.1), CompactDisc.java (code listing 8.2)and Classics.txt (code listing 8.3) from www.aw.com/cssupport or as directedby your instructor. Song.java is complete and will not be edited. Classics.txt isthe data file that will be used by CompactDisc.java, the file you will be editing.

    2. In CompactDisc.java, there are comments indicating where the missing code isto be placed. Declare an array of Songs, called cd, to be of size 6.

    3. Fill the array by creating a new song with the title and artist and storing it inthe appropriate position in the array.

    4. Print the contents of the array to the console.

    5. Compile, debug, and run. Your output should be as follows:

    Contents of ClassicsOde to Joy by BachThe Sleeping Beauty by TchaikovskyLullaby by BrahmsCanon by BachSymphony No. 5 by BeethovenThe Blue Danube Waltz by Strauss

    70 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 70

  • Code Listing 8.1 (Song.java)

    /*This program represents a song*/

    public class Song

    {

    /**The title of the song*/

    private String title;

    /**The artist who sings the song*/

    private String artist;

    /**constructor

    @param title The title of the song

    @param artist The artost who sings the song*/

    public Song(String title, String artist)

    {

    this.title = title;

    this.artist = artist;

    }

    /**toString method returns a description of the song

    @return a String containing the name of the song and the artist*/

    public String toString()

    {

    return title + " by " + artist + "\n";

    }

    }

    Chapter 8 Lab Arrays 71

    Christie_434242_LM 2/14/06 1:49 PM Page 71

  • Code Listing 8.2 (CompactDisc.java)

    /*This program creates a list of songs for a CD by reading from afile*/

    import java.io.*;

    public class CompactDisc

    {

    public static void main(String [] args) throws IOException

    {

    FileReader file = new FileReader("Classics.txt");

    BufferedReader input = new BufferedReader(file);

    String title;

    String artist;

    //Declare an array of songs, called cd, of size 6

    for (int i = 0; i < cd.length; i++)

    {

    title = input.readLine();

    artist = input.readLine();

    // fill the array by creating a new song with

    // the title and artist and storing it in the

    // appropriate position in the array

    }

    System.out.println("Contents of Classics:");

    for (int i = 0; i < cd.length; i++)

    {

    //print the contents of the array to the console

    }

    }

    }

    72 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 72

  • Code Listing 8.3 (Classics.txt)

    Ode to Joy

    Bach

    The Sleeping Beauty

    Tchaikovsky

    Lullaby

    Brahms

    Canon

    Bach

    Symphony No. 5

    Beethoven

    The Blue Danube Waltz

    Strauss

    Chapter 8 Lab Arrays 73

    Christie_434242_LM 2/14/06 1:49 PM Page 73

  • Christie_434242_LM 2/14/06 1:49 PM Page 74

  • Chapter 9 LabMore Classes and Objects

    Objectives Be able to write a copy constructor Be able to write equals and toString methods Be able to use objects made up of other objects (Aggregation) Be able to write methods that pass and return objects

    Introduction

    We discussed objects in Chapter 6 and we modeled a television in the Chapter 6 lab.We want build on that lab, and work more with objects. This time, the object that weare choosing is more complicated. It is made up of other objects. This is called aggre-gation. A credit card is an object that is very common, but not as simple as a television.Attributes of the credit card include information about the owner, as well as a balanceand credit limit. These things would be our instance fields. A credit card allows you tomake payments and charges. These would be methods. As we have seen before, therewould also be other methods associated with this object in order to construct the objectand access its fields.

    Examine the UML diagram that follows. Notice that the instance fields in theCreditCard class are other types of objects, a Person object or a Money object. We cansay that the CreditCard has a Person, which means aggregation, and the Personobject has a Address object as one of its instance fields. This aggregation structurecan create a very complicated object. We will try to keep this lab reasonably simple.

    To start with, we will be editing a partially written class, Money. The constructorthat you will be writing is a copy constructor. This means it should create a new object,but with the same values in the instance variables as the object that is being copied.

    Next, we will write equals and toString methods. These are very commonmethods that are needed when you write a class to model an object. You will also see acompareTo method that is also a common method for objects.

    Christie_434242_LM 2/14/06 1:49 PM Page 75

  • After we have finished the Money class, we will write a CreditCard class. Thisclass contains Money objects, so you will use the methods that you have written tocomplete the Money class. The CreditCard class will explore passing objects and thepossible security problems associated with it. We will use the copy constructor wewrote for the Money class to create new objects with the same information to return tothe user through the accessor methods.

    76 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Credit Card

    Money Person

    Address

    -balance:Money-creditLimit:Money-owner:Person

    +CreditCard(newCardHolder:Person, limit:Money):+getBalance():Money+getCreditLimit():Money+getPersonals():String+charge(amount:Money):void+payment(amount:Money):void

    -dollars:long-cents:long

    +Money(anount:double):+Money(otherObject:Money):+add(otherAmount:Money):Money+subtract(otherAmount:Money):Money+compareTo(otherObject:Money):int+equals(otherObject:Money):boolean+toString():String

    -lastName:String-firstName:String-home:Address

    +toString():String

    -street:String-city:String-state:String-zip:String

    +toString():String

    Christie_434242_LM 2/14/06 1:49 PM Page 76

  • Task #1 Writing a Copy Constructor

    1. Copy the files Address.java (code listing 9.1), Person.java (code listing 9.2),Money.java (code listing 9.3), MoneyDriver.java (code listing 9.4), andCreditCardDemo.java (code listing 9.5) from www.aw.com/cssupport or asdirected by your instructor. Address.java, Person.java, MoneyDemo.java, andCreditCardDemo.java are complete and will not need to be modified. We willstart by modifying Money.java.

    2. Overload the constructor. The constructor that you will write will be a copyconstructor. It should use the parameter money object to make a duplicatemoney object, by copying the value of each instance variable from the parame-ter object to the instance variable of the new object.

    Chapter 9 Lab More Classes and Objects 77

    Christie_434242_LM 2/14/06 1:49 PM Page 77

  • Task #2 Writing equals and toString methods

    1. Write and document an equals method. The method compares the instancevariables of the calling object with instance variables of the parameter objectfor equality and returns true if the dollars and the cents of the calling object arethe same as the dollars and the cents of the parameter object. Otherwise, itreturns false.

    2. Write and document a toString method. This method will return a Stringthat looks like money, including the dollar sign. Remember that if you have lessthan 10 cents, you will need to put a 0 before printing the cents so that itappears correctly with 2 decimal places.

    3. Compile, debug, and test by running the MoneyDriver.java driver program. Youshould get the output:

    The current amount is $500.00Adding $10.02 gives $510.02Subtracting $10.88 gives $499.14$10.02 equals $10.02$10.88 does not equal $10.02

    78 Lab Manual to Accompany Starting Out with Java 5: From Control Structures to Objects

    Christie_434242_LM 2/14/06 1:49 PM Page 78

  • Task #3 Passing and Returning Objects

    1. Create a CreditCard class according to the UML Diagram on the back. Itshould have data fields that include an owner of type Person, a balance of typeMoney, and a creditLimit of type Money.

    2. It should have a constructor that has two parameters, a Person to initialize theowner and a Money value to initialize the creditLimit. The balance can be ini-tialized to a Money value of zero. Remember you are passing in objects (passby reference), so you have passed in the address to an object. If you want yourCreditCard to have its own creditLimit and balance, you should create a newobject of each using the copy constructor in the Money class.

    3. It should have accessor methods to get the balance and the available credit.Since these are objects (pass by reference), we dont want to create an insecurecredit card by passing out addresses to components in our credit card, so wemust return a new object with the same values. Again, use the copy constructorto create a new object of type money that can be returned.

    4. It should have an accessor method to get the information about the owner, butin the form of a String that can be printed out. This can be done by calling thetoString method for the owner (who is a Person).

    5. It should have a method that will charge to the credit card by adding theamount of Money in the parameter to the balance if it will not exceed the creditlimit. If the credit limit will be exceeded, the amount should not be added, andan error message can be printed to the console.

    6. It should have a method that will make a payment on the credit card by sub-tracting the amount of Money in the parameter from the balance.

    7. Compile, debug, and test it out completely by running CreditCardDemo.java.You should get the output:

    Diane Christie, 237J Harvey Hall, Menomonie, WI 54751Balance: $0.00Credit Limit: $1000.00Attempt to charge $200.00Charge: $200.00Balance: $200.00Attempt to charge $10.02C