Average Three Numbers) You have just written an application that takes three numbers as input in JTextFields, stores the three numbers in variables and then finds the aver- age of the numbers. The output is displayed in an uneditable JTextField (see Fig. 5.35, which displays the incorrect output). You soon realize, however, that the number displayed in the Average is: JTextField is not the average, but rather a number that does not make sense given the input. Use the debugger to help locate and remove this error.
a) Copying the template to your working directory. Copy the C:Examples Tutorial05ExercisesAverageDebugging directory to your C:SimplyJava directory.
b) Opening the Command Prompt window and changing directories. Open the Command Prompt window by selecting Start > Programs > Accessories > Command Prompt. Change to your working directory by typing cd C:SimplyJavaAver- debugging.
c) Running the application. Run the Average Three Numbers application by typing java Average. Type 5, 7 and 11 in the three input JTextFields. View the output to observe that it is incorrect. The average of these three numbers should be 7 in integer arithmetic. (Recall from Section 5.5 that integer division yields an integer result.)
d) Compiling with the -g option. Compile your application for use in the debugger by typing javac -g Average.java.
e) Starting the debugger. Close the application and start the debugger by typing jdb.
f) Setting breakpoints. Set breakpoints in the calculateJButton
```
1 //Average.java
2 // Application that finds the average of three integers.
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6
7 public class Average extends JFrame
8 {
9 // JLabel and JTextField for user to input first number
10 private JLabel firstNumberJLabel;
11 private JTextField firstNumberJTextField;
12
13 // JLabel and JTextField for user to input second number
14 private JLabel secondNumberJLabel;
15 private JTextField secondNumberJTextField;
16
17 // JLabel and JTextField for user to input third number
18 private JLabel thirdNumberJLabel;
19 private JTextField thirdNumberJTextField;
20
21 // JLabel and JTextField to display average
22 private JLabel averageJLabel;
23 private JTextField averageJTextField;
24
25 // JButton to initiate average calculation
26 private JButton calculateJButton;
27
28 // no-argument constructor
29 public Average()
30 {
31 createUserInterface();
32 }
33
34 // create and position GUI components; register event handlers
35 private void createUserInterface()
36 {
37 // get content pane for attaching GUI components
38 Container contentPane = getContentPane();
39
40 // enable explicit positioning of GUI components
41 contentPane.setLayout( null );
42
43 // set up firstNumberJLabel
44 firstNumberJLabel = new JLabel();
45 firstNumberJLabel.setText( "Enter first number:" );
46 firstNumberJLabel.setBounds( 20, 20, 125, 20 );
47 contentPane.add( firstNumberJLabel );
48
49 // set up firstNumberJTextField
50 firstNumberJTextField = new JTextField();
51 firstNumberJTextField.setText( "0" );
52 firstNumberJTextField.setBounds( 165, 20, 40, 20 );
53 firstNumberJTextField.setHorizontalAlignment(
54 JTextField.RIGHT );
55 contentPane.add( firstNumberJTextField );
56
57 // set up secondNumberJLabel
58 secondNumberJLabel = new JLabel();
59 secondNumberJLabel.setText( "Enter second number:" );
60 secondNumberJLabel.setBounds( 20, 50, 125, 20 );
61 contentPane.add( secondNumberJLabel );
62
63 // set up secondNumberJTextField
64 secondNumberJTextField = new JTextField();
65 secondNumberJTextField.setText( "0" );
66 secondNumberJTextField.setBounds( 165, 50, 40, 20 );
67 secondNumberJTextField.setHorizontalAlignment(
68 JTextField.RIGHT );
69 contentPane.add( secondNumberJTextField );
70
71 // set up thirdNumberJLabel
72 thirdNumberJLabel = new JLabel();
73 thirdNumberJLabel.setText( "Enter third number:" );
74 thirdNumberJLabel.setBounds( 20, 80, 125, 20 );
75 contentPane.add( thirdNumberJLabel );
76
77 // set up thirdNumberJTextField
78 thirdNumberJTextField = new JTextField();
79 thirdNumberJTextField.setText( "0" );
80 thirdNumberJTextField.setBounds( 165, 80, 40, 20 );
81 thirdNumberJTextField.setHorizontalAlignment(
82 JTextField.RIGHT );
83 contentPane.add( thirdNumberJTextField );
84
85 // set up averageJLabel
86 averageJLabel = new JLabel();
87 averageJLabel.setText( "Average is:" );
88 averageJLabel.setBounds( 20, 110, 130, 20 );
89 contentPane.add( averageJLabel );
90
91 // set up averageJTextField
92 averageJTextField = new JTextField();
93 averageJTextField.setText( "0" );
94 averageJTextField.setEditable( false );
95 averageJTextField.setBounds( 165, 110, 40, 20 );
96 averageJTextField.setHorizontalAlignment( JTextField.RIGHT );
97 contentPane.add( averageJTextField );
98
99 // set up calculateJButton
100 calculateJButton = new JButton ();
101 calculateJButton.setText( "Calculate" );
102 calculateJButton.setBounds( 225, 20, 90, 20 );
103 contentPane.add( calculateJButton );
104 calculateJButton.addActionListener(
105
106 new ActionListener() // anonymous inner class
107 {
108 // called when calculateJButton is pressed
109 public void actionPerformed( ActionEvent event )
110 {
111 calculateJButtonActionPerformed( event );
112 }
113
114 } // end anonymous inner class
115
116 ); // end call to addActionListener
117
118 // set properties of application’s window
119 setTitle( "Average Three Numbers" ); // set title bar text
120 setSize( 335, 180 ); // set window size
121 setVisible( true ); // display window
122
123 } // end method createUserInterface
124
125 // calculate the average of the three values
126 private void calculateJButtonActionPerformed( ActionEvent event )
127 {
128 // get values input by user
129 int number1 = Integer.parseInt(
130 firstNumberJTextField.getText() );
131 int number2 = Integer.parseInt(
132 secondNumberJTextField.getText() );
133 int number3 = Integer.parseInt(
134 thirdNumberJTextField.getText() );
135
136 // sum number1, number2 and number3 and divide by 3
137
138
int result = ( number1 + number2 + number3 ) / 3;
139 // display the result
140 averageJTextField.setText( String.valueOf( result ) );
141
142 } // end method calculateJButtonActionPerformed
143
144 // main method
145 public static void main( String args[] )
146 {
147 Average application = new Average();
148 application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
149
150 } // end method main
151
152 } // end class Average
```
You might also like to view...
If your final video is intended for Blu-ray playback, you may export the final video to which of the following video formats?
A. MPEG-1 B. MPEG-2 C. MPEG-4 D. H.264
Design view shows the data in the form. This is the view you use to enter or change data
Indicate whether the statement is true or false
In the Page Setup group, Landscape is a type of ____.
A. placeholder B. page orientation C. custom slide show D. theme
What is the value of aList after the following code is executed? aList = [10, 20, 30]aList.pop()
A. [10, 20, 30] B. [10,20] C. [] D. [20, 30]