Java basics Chapter 2 CS 101-E 1

advertisement
Java basics
Chapter 2
CS 101-E
1
DisplayForecast.java
// Authors: J. P. Cohoon and J. W. Davidson
// Purpose: display a quotation in a console window
public class DisplayForecast {
Three comments
// method main(): application entry point
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println("
Thomas Watson, IBM, 1943.");
}
}
// class
Three
An
public,
We
Java
A
Programs
method
indicates
application
will
allows
statements
static,
defines
like
discuss
are
isaa
rest
amethod
statement
and
read
named
program
an
static
ofmake
void
object
the
byand
must
piece
people
line
are
is
up
to
form.
void
required
keywords.
is
be
have
the
ofa
–made
code
later
comment
An
action
make
a object
name
to
that
up
sure
have
They
ofof
performs
method
can
they
a
are
main()
some
public
cannot
multiple
have
readable.
methods
action
static
be
lines
used
void
orof
and
implements
as
text
method
names
attributes
named
a behavior
main().
Comments are used to document authors, purpose,
Method
public
Semicolons
Use
and
whitespace,
program
means
main()
delimit
elements
the
iscomments,
part
method
oneofstatement
is
shareable
and
DisplayForecast
indentation
from the
next
to2 aid
Keyword
class
indicates
aclass
class
definition
follows
understanding
Indentation
// Authors: J. P. Cohoon and J. W. Davidson
// Purpose: display a quotation in a console window
public class DisplayForecast {
Method main() is part of
DisplayForecast
// method main(): application entry point
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println("
Thomas Watson, IBM, 1943.");
}
}
Indentation indicates subcomponents
Statements are
part of method
main()
3
Good whitespacing
// Authors: J. P. Cohoon and J. W. Davidson
// Purpose: display a quotation in a console window
public class DisplayForecast {
Whitespace
// method main(): application entry point
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println("
Thomas Watson, IBM, 1943.");
}
}
Whitespace separates program elements
Whitespace between program elements is
ignored by Java
4
Bad whitespacing
 The same program without any whitespacing or comments:
public class DisplayForecast2 { public static void main
(String[] args) { System.out.print("I think there is a
world market for"); System.out.println(" maybe five
computers."); System.out.println("
Thomas Watson, IBM,
1943."); } }
5
An aside: IOCCC
 The International Obfuscated C Code Contest
 Online at http://www.ioccc.org
 C has very terse syntax
 So the contest tries to make it terser!
 One common method is by modifying the whitespace
6
An aside: IOCCC
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
X
X
X X
X X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
XX
X
X
XX
X
X
XXX
X
XXXXXXXXX
X
XXX
X
X
XXX
X
XXXX
XXXX
X
XXX
X
X
XXXX
X XX ainma(){ archa XX X
XXXX
X
X
XXXX
X
oink[9],*igpa,
X
XXXX
X
X
XXXXXX atinla=etcharga(),iocccwa XXXXXX
X
X
XXXX ,apca='A',owla='a',umna=26 XXXX
X
X
XXX ; orfa(; (atinla+1)&&(!(((
XXX
X
X
XX atinla-apca)*(apca+umna-atinla) XX
X
X
X >=0)+((atinla-owla)*(owla+umna- X
X
X
atinla)>=0))); utcharpa(atinla),
X
X
X atinla=etcharga()); orfa(; atinla+1; X
X
X X ){ orfa(
igpa=oink
,iocccwa=( X X
X X (atinla- XXX apca)*( XXX apca+umna- X X
X atinla)>=0) XXX
XXX
; ((((
X
X atinla-apca XXXXX XXXXXXX XXXXX )*(apca+
X
X umna-atinla XXXXXX )>=0) XXXXXX +((atinla- X
X owla)*(owla+ XXXX
umnaXXXX atinla)>=0)) X
X
&&"-Pig-"
XX "Lat-in"
XX
"COb-fus"
X
X "ca-tion!!"[ X (((atinlaX apca)*(apca+ X
X umna-atinla) X >=0)?atinlaX apca+owla: X
X atinla)-owla X ]-'-')||((igpa== X oink)&&!(*( X
X igpa++)='w') X )||! X (*( X igpa X ++)=owla); * X
X (igpa++)=(( X (
XXX
XXX
X atinla-apca X
X )*(apca+
X umna XXX - XXX
X atinla)>=0) X
X ?atinlaX apca XXX + XXX owla X :atinla), X
X
atinla=
X
X
X
X etcharga()) X
X
; orfa(
X atinla=iocccwa?(( X (atinlaX
X owla)*(owla+ X umna-atinla)>=0 X )?atinlaX
X owla+apca:
X
atinla):
X atinla; ((( X
X atinla-apca)* X (apca+umna- X atinla)>=0)+( X
X (atinla-owla)* X (owla+
X umna-atinla)>= X
X 0)); utcharpa( XX
XX atinla),atinla X
X =etcharga());
XXXXXXX orfa(*igpa=0,
X
X igpa=oink; *
igpa; utcharpa( X
X *(igpa++))); orfa(; (atinla+1)&&(!((( X
X atinla-apca
)*(apca+
X
X
umnaXXXXX XXXXX atinla)>=0 X
X
)+((
XXXXX
atinla- X
XX owla)*(
owla+umna- XX
XX atinla)>=0))); utcharpa XX
XX (atinla),atinla=
XX
XX etcharga()); } XX
XXXX
}
XXXX
XXXXXXXXX
a(X){/*/X=a(X){/*/X=X
XX
-1;F;X=-1;F;X=XXX
-1;F;}/*/
-1;F;}/*/
XXXX
XXXXX
char*z[]={"char*z[]={","a(X){/*/X=-","-1;F;X=-","-1;F;}/*/","9999999999 :-| ",
XXXXXX
"int q,i,j,k,X,O=0,H;S(x)int*x;{X+=X;O+=O;*x+1?*x+2||X++:O++;*x=1;}L(n){for(*",
XXXXXXX
orfa
for
"z[i=1]=n+97;i<4;i++)M(256),s(i),M(128),s(i),M(64),N;X*=8;O*=8;}s(R){char*r=z",
XXXXXXXXX
"[R];for(q&&Q;*r;)P(*r++);q&&(Q,P(44));}M(m){P(9);i-2||P(X&m?88:O&m?48:32);P(",
archa
char
ainma
main
"9);}y(A){for(j=8;j;)~A&w[--j]||(q=0);}e(W,Z){for(i-=i*q;i<9&&q;)y(W|(1<<i++&",
etcharga getchar
"~Z));}R(){for(k=J[*J-48]-40;k;)e(w[k--],X|O);}main(u,v)char**v;{a(q=1);b(1);",
utcharpa
putchar
#define _ -F<00||--F-OO--;
#include
<stdio.h>
int
F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{ #define Q r=R[*p++-'0'];while(
#define B ;break;case
_-_-_-_
char*s="Qjou!s\\311^-g\\311^-n\\311^-c\\::^-q-ma%mO1JBHm%BQ-aP1J[O1HB%[Q<nbj\
_-_-_-_-_-_-_-_-_
o)*|gps)<<*txjudi)m*|aQdbtf!::::;sfuvso<aQefgbvmu;aQ<m,,a%CQ<csfbla%bQ<aN2!Q\
_-_-_-_-_-_-_-_-_-_-_-_
\ndbtf!aP2Q;m>aP2Q<a%!D12J!JGJHJOJQJFJSJJJMHS%HD12D12N3!N4\nJUJT%UQm>aP4HC%T\
Qs\\q,,^>m,2<m>aP4HC%SD12N1\nJNQm>s\\..q^aHC%NHb%GN1!D32P3%RN1UP1D12JPQUaP1H\
_-_-_-_-_-_-_-_-_-_-_-_-_-_
"c(1);*J=--u?O?*J:*v[1]:53;X|=u<<57-*v[u];y(X);K=40+q;q?e(O,X),q&&(K='|'),e(X",
",O),R(),O|=1<<--i:J[*J-48+(X=O=0)]--;L(q=0);for(s(i=0);q=i<12;)s(i++),i>4&&N",
R%PN4\nQ<g\\(aP3Q(^>aP2Q,2<n\\(aP3Q(^>aP4Hb%OD12D12N2!N3\nJVP3Q,,<jg)aP3Q=>n\
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
";s(q=12);P(48);P('}');P(59);N;q=0;L(1);for(i=5;i<13;)s(i++),N;L(2);}",0};
\\(aP3Q(^*m>g\\(aP3Q(^<fmtf!m,,aHC%QN1!N1\nJ#Qqsjoug)#&e]o#-aP1Q*aHb%#Qqvut)\
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
b(X){/*/X=b(X){/*/X=aP1Q*aHb%FN1\nQm>::::aHC%VP3Q>bupj)hfut)c**aHb%JD12JON1!Qjg)a%LN1UP1D12JIQUa\
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-1;F;X=-1;F;X=P1HL%IQ*m>aN2!N2\nP2Q<fmtf!m,,aHC%MN1!N2>P2Q>aN2\nP2Hbdd!b/d";k;char
R[4][99]
-1;F;}/*/
-1;F;}/*/
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
;main(c,v)char**v;{char*p,*r,*q;for(q=s;*q;q++)*q>'
'&&(*q)--;{FILE*i=fopen(v
int q,i,j,k,X,O=0,H;S(x)int*x;{X+=X;O+=O;*x+1?*x+2||X++:O++;*x=1;}L(n){for(*
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
[1],"r"),*o=fopen(q-3,"w");for(p=s;;p++)switch(*p++){B'M':Q(k=fgetc(i))!=EOF
z[i=1]=n+97;i<4;i++)M(256),s(i),M(128),s(i),M(64),N;X*=8;O*=8;}s(R){char*r=z
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
[R];for(q&&Q;*r;)P(*r++);q&&(Q,P(44));}M(m){P(9);i-2||P(X&m?88:O&m?48:32);P(
&&k!=*p)*r++=k;if(k==EOF){fputs("}}\n",o);fclose(o);return
system(q-6);}*r=0
9);}y(A){for(j=8;j;)~A&w[--j]||(q=0);}e(W,Z){for(i-=i*q;i<9&&q;)y(W|(1<<i++&
B'P':while(*p!='`')fputc(*p++,o)B'O':Q*r)fputc(*r++,o);p--B'C':k=0;Q k<*p-'0'
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
~Z));}R(){for(k=J[*J-48]-40;k;)e(w[k--],X|O);}main(u,v)char**v;{a(q=1);b(1);
)(*r++=fgetc(i),k++);*r=0
B'I':k= *p;if(**R==k)goto G B'G':k= *p;G:p=s;while(
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
c(1);*J=--u?O?*J:*v[1]:53;X|=u<<57-*v[u];y(X);K=40+q;q?e(O,X),q&&(K='|'),e(X
*p!='$'||p[1]!=
k)p++;p++B'N':R[*p-'0'][0]++;}}}
_-_-_-_-_-_-_-_-_-_-_-_-_-_
,O),R(),O|=1<<--i:J[*J-48+(X=O=0)]--;L(q=0);for(s(i=0);q=i<12;)s(i++),i>4&&N
;s(q=12);P(48);P('}');P(59);N;q=0;L(1);for(i=5;i<13;)s(i++),N;L(2);}
_-_-_-_-_-_-_-_-_-_-_-_
c(X){/*/X=c(X){/*/X=_-_-_-_-_-_-_-_
-1;F;X=-1;F;X=_-_-_-_
-1;F;}/*/
-1;F;}/*/
7
}
Identifiers
 Identifiers are names for variables, classes, etc.
 Good ones are compact, but inidicate what they stand for
 radius, width, height, length
 Bad ones are either too long
 theRadiusOfTheCircle
 theWidthOfTheBoxThatIsBeingUsed
 the_width_of_the_box_that_is_being_used
 Or too short
 a, b, c, d, e
 Good identifiers will help the graders understand your
program!
8
Keywords
 Some words are reserved, and can’t be used as identifiers
// Authors: J. P. Cohoon and J. W. Davidson
// Purpose: display a quotation in a console window
public class DisplayForecast {
}
// method main(): application entry point
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println(" Thomas Watson, IBM, 1943.");
}
9
Capitalization
 Case matters!
 public ≠ Public ≠ PUBLIC
 This is different that FORTRAN and BASIC
 This is the same as C/C++
 You can use Public as a identifier
 Not recommended, though!
10
Defining a method
 All methods have the following syntax:
modifers type name ( parameters ) { statements }
Properties
of the
method
Type
that it
returns
public static
void
A name
for the
method
main
Any number
The body of
(including zero)
the method
of parameters (can be empty)
(String[] args)
{ ... }
11
Escape sequences
 Java provides escape sequences for printing special
characters
 \b
backspace
 \n
newline
 \t
tab
 \r
carriage return
 \\
backslash
 \"
double quote
 \'
single quote
12
Escape sequences
 What do these statements output?
System.out.println("Person\tHeight\tShoe size");
System.out.println("=========================");
System.out.println("Hannah\t5‘1\"\t7");
System.out.println("Jenna\t5'10\"\t9");
System.out.println("JJ\t6'1\"\t14");
 Output
Person Height Shoe size
=========================
Hannah 5‘1"
7
Jenna
5'10"
9
JJ
6'1"
14
13
Primitive variable assignment
 Assignment operator =
 Allows the memory location for a variable to be updated
target
=
Name of previously
defined object
 Consider
int j = 11;
j = 1985;
expression ;
Expression t o be
evaluat ed
j
1985
11
14
Primitive variable assignment
 Consider
int a = 1;
int aSquared = a * a;
a = 5;
aSquared = a * a;
 Consider
int i = 0;
i = i + 1;
 Consider
int asaRating;
asaRating = 400;
a
5
1
aSquared
25
1
i
1
0
asaRating
400
15
Primitive variable assignment
 Consider
double x = 5.12;
double y = 19.28;
double rememberX = x;
x = y;
y = rememberX;
x
19.28
5.12
y
19.28
5.12
rememberX
5.12
16
Primitive variable types
 Java has 8 (or so) primitive types:
 float
real numbers
 double
two values: true and falsea
 boolean
 char
a single character
 byte
 short
integer numbers
 int
 long
 Also the void “type”
17
Primitive real (floating-point) types
 A float takes up 4 bytes of space
 Has 6 decimal places of accuracy: 3.14159
 A double takes up 8 bytes of space
 Has 15 decimal places of accuracy: 3.14159265358979
 Always use doubles
 It will save you quite a headache!
18
Primitive integer types

Consider a byte:
0
1
0
0
0
1
0
1


1 byte = 8 bits
Each bit has two possibilities: 0 or 1


28 = 256
Thus, a byte can have any one of 256 values

A Java byte can have values from -128 to 127


From -27 to 27-1
C/C++ has unsigned versions; Java does not
19
Primitive integer types
Type
Bytes Minimum value
Maximum value
byte
1
-27=-128
27-1=127
short 2
-215=
-32,768
215-1=
32,767
int
4
-231=-2,147,483,648
231-1=2,147,483,647
long
8
-263=-9,223,372,036,
854,775,808
263-1=9,223,372,036,
854,775,807
20
Increment and decrement operators
 ++
 Increments a number variable by 1
 - Decrements a numeric variable by 1
 Consider
int i = 4;
++i;
System.out.println(i);
System.out.print(++i);
System.out.println(i++);
System.out.println(i);
//
//
//
//
//
//
i
4
5
6
7
define
increment
display
update then display
display then update
display
21
Why you should get the extended
warranty
22
Primitive character type
 All




characters have a integer equivalent
‘0’ = 48
‘1’ = 49
‘A’ = 65
‘a’ = 97
 Thus, you can refer to ‘B’ as ‘A’+1
23
Primitive character type
public class LowerToUpper {
// main(): application entry point
public static void main(String[] args) {
// set lower case character of interest
char lowerCaseLetter = 'c';
// convert to uppercase equivalent
char upperCaseLetter = 'A' + (lowerCaseLetter - 'a');
// display result
System.out.println("Uppercase equivalent of");
System.out.println("
" + lowerCaseLetter);
System.out.println("is");
System.out.println("
" + upperCaseLetter);
}
}
24
Primitive boolean type
 When is the following program valid in Java?
 Assume a and b have been properly declared
...
if ( a && b ) {
// do something interesting
}
...
 Answer: ONLY when a and b are boolean variables
 In C/C++, a and b would be ints (or int variants)
 If you try making a and b ints in Java, you get the
following:
 operator && cannot be applied to int,int
25
Primitive void “type”
 In Java, you can ONLY use void to specify that a method does
not return a value
 You cannot use it to declare a void “variable”, as in C/C++:
void *foo;
 You cannot use it to specify that there are no parameters to a
method:
...
int foo (void) {
...
 This is different from C/C++
26
Variable initialization
 Consider the following code:
int x;
System.out.println(x);
 What happens?
 Error message:
 variable x might not have been initialized
27
Constants
 Consider the following:
final int x = 5;
 The value of x can NEVER be changed!
 The value assigned to it is “final”
 This is how Java defines constants
28
Expressions
 What is the value used to initialize expression
int expression = 4 + 2 * 5;
 What value is displayed
System.out.println(5 / 2.0);
 Java rules in a nutshell
 Each operator has a precedence level and an associativity
 Operators with higher precedence are done first
 * and / have higher precedence than + and  Associativity indicates how to handle ties
29
 When floating-point is used the result is floating point
Question on expressions
 Does the following statement compute the average of double
variables a, b, and c? Why
double average = a + b + c / 3.0;
30
System.out.println()
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println("
Thomas Watson, IBM, 1943.");
}
 Class System supplies objects that can print and read values
 System variable out references the standard printing object
 Known as the standard output stream
 Variable out provides access to printing methods
 print(): displays a value
 println(): displays a value and moves cursor to the next
line
31
System.out
System.out : PrintStream
- destination =
- ...
+ println(String s) : void
+ print(String s) : void
+ ...
Variable System.out gives
access to an output stream
of type PrintStream
The printing destination attribute
for this PrintStream object is the
console window
The behaviors of a PrintStream
object support a high-level view of
printing
32
Selection
The period indicates that we want to select an
individual class member of System
The period indicates that we want to
select an individual class member of out
The method we are calling
System
.
out
.
print
(
" string
"
)
Member out of System is an output
Literal character string that is
stream object automatically
the parameter to print().
associated with the console window
running the application
Class System is defined
in the standard
Method member of out. The execution of member print()
package java.lang
causes its parameter to be displayed to the output stream
33
I/O streams
 System.out
 Prints to standard output
 Equivalent to cout in C++, and print() in C
 System.err
 Prints to standard error
 Equivalent to cerr in C++, and fprintf(stderr) in C
 System.in
 Reads from standard input
 Equivalent to cin in C++, and scanf() in C
34
Beware!!!
35
Example program: temperature
conversion
// Purpose: Convert a Celsius temperature to Fahrenheit
public class CelsiusToFahrenheit {
// main(): application entry point
public static void main(String[] args) {
// set Celsius temperature of interest
int celsius = 28;
// convert to Fahrenheit equivalent
int fahrenheit = 32 + ((9 * celsius) / 5);
// display result
System.out.println("Celsius temperature");
System.out.println("
" + celsius);
System.out.println("equals Fahrenheit temperature");
System.out.println("
" + fahrenheit);
}
}
36
Computation
 Programmers frequently write small programs for computing
useful things
 Example – body mass index (BMI)
 Measure of fitness
 Ratio of person’s weight to the square of the person’s
height
 Weight in is kilograms, height is in meters
 Person of interest is 4.5 feet and weighs 75.5 pounds
 Metric conversions
 Kilograms per pound 0.454
 Meters per foot 0.3046
37
Program outline for BMI.java
// Purpose: Compute BMI for given weight and height
public class BMI {
// main(): application entry point
public static void main(String[] args) {
// define constants
// set up person's characteristics
// convert to metric equivalents
// perform bmi calculation
// display result
}
}
38
BMI.java: define constants
KILOGRAMS_PER_POUND
0.454
// define constants
final double KILOGRAMS_PER_POUND = 0.454;
final double METERS_PER_FOOT = 0.3046;
METERS_PER_FOOT
0.3046
39
BMI.java: personal characteristics
weightInPounds
75.5
// set up person's characteristics
double weightInPounds = 75.5; // our person’s weight
double heightInFeet = 4.5;
// our person’s height
heightInFeet
4.5
40
BMI.java: convert to metric equivalents
metricWeight
34.2770
// convert to metric equivalents
double metricWeight = weightInPounds *
KILOGRAMS_PER_POUND;
double metricHeight = heightInFeet *
METERS_PER_FOOT;
metricHeight
1.3706
41
BMI.java: perform BMI calculation
// perform bmi calculation
double bmi = metricWeight / (metricHeight *
metricHeight);
bmi
18.2439
42
BMI.java: display result
bmi
18.2439
// display result
System.out.println("A person with");
System.out.println(" weight " + weightInPounds + " lbs");
System.out.println(" height " + heightInFeet + " feet");
System.out.println("has a BMI of " + Math.round(bmi));
Math.round(bmi) is 18
Operator evaluation depend upon its operands
43
public static void main(String[] args) {
// define constants
final double KILOGRAMS_PER_POUND = 0.454;
final double METERS_PER_FOOT = 0.3046;
// set up person's characteristics
double weightInPounds = 75.5; // our person’s weight
double heightInFeet = 4.5;
// our person’s height
// convert to metric equivalents
double metricWeight = weightInPounds *
KILOGRAMS_PER_POUND;
double metricHeight = heightInFeet * METERS_PER_FOOT;
// perform bmi calculation
double bmi = metricWeight / (metricHeight * metricHeight);
// display result
System.out.println("A person with");
System.out.println(" weight " + weightInPounds + " lbs");
System.out.println(" height " + heightInFeet + " feet");
System.out.println("has a BMI of " + Math.round(bmi));
}
Pentium math error 1
 Intel’s Pentiums
(60Mhz – 100 Mhz)
had a floating point
error
 Graph of z = y/x
 Intel reluctantly
agreed to replace
them in 1994
Graph from http://kuhttp.cc.ukans.edu/cwis/units/IPPBR/pentium_fdiv/pentgrph.html 45
Pentium math error 2

Top 10 reasons to buy a Pentium:
10
Your old PC is too accurate
8.9999163362 Provides a good alibi when the IRS calls
7.9999414610 Attracted by Intel's new "You don't need to know what's
inside" campaign
6.9999831538 It redefines computing--and mathematics!
5.9999835137 You've always wondered what it would be like to be a
plaintiff
4.9999999021 Current paperweight not big enough
3.9998245917 Takes concept of "floating point" to a new level
2.9991523619 You always round off to the nearest hundred anyway
1.9999103517 Got a great deal from the Jet Propulsion Laboratory
0.9999999998 It'll probably work!!
46
Common program elements
 Type
 Set of values along with operators that can manipulate
and create values from the set
 Primitive types support numeric, character, logical values
 double and float
 Values with decimals
 byte, short, int, long
 Integers
 char
 Characters (considered numeric)
 boolean
 Logical values
 Basic operators
 + addition
 * multiplication
- subtraction
/ division
47
Common program elements
 Constant
 Symbolic name for memory location whose value does not
change
 KILOGRAMS_PER_POUND
 Variable
 Symbolic name for memory location whose value can
change
 weightInPounds
48
Interactive programs
 Programs that interact with their users through statements
performing input and output
 Temperature conversion
 Not interactive – Celsius temperature is fixed
 BMI.java
 Not interactive – weight and height are fixed
49
Un-reliable computers…
50
Interactive programs
 Programs that interact with their users through statements
performing input and output
 BMI.java
 Not interactive – weight and height are fixed
51
Support for interactive console programs
 Variable System.in
 Associated with the standard input stream – the keyboard
 Class Scanner
 Makes obtaining input from the keyboard easy
Scanner stdin = Scanner.create(System.in);
stdin : Scanner
- source =
- ...
Variable stdin gives Scanner
access to an input stream
Input source attribute for this
Scanner is the keyboard
+ nextDouble() : double
+ ...
Behaviors of a Scanner support 52
high-level view of inputting text
How to make Java work with the Scanner
class
 In Java 1.5, do a:
import java.util.*;
 In Java 1.4 (what we are using)
 Copy the Scanner.class file to the classes subdirectory for
the JCreator project
53
Interactive program for BMI
 Program outline
// Purpose: Compute BMI for user-specified
// weight and height
public class BMICalculator {
// main(): application entry point
public static void main(String[] args) {
//
//
//
//
//
//
//
defining constants
displaying legend
set up input stream
get person's characteristics
convert to metric equivalents
perform bmi calculation
display result
}
}
54
public static void main(String[] args) {
// define constants
//...
// displaying legend
System.out.println ("BMI Calculator\n");
// set up input stream
Scanner stdin = Scanner.create(System.in);
// get person's characteristics
System.out.print("Enter weight (lbs): ");
double weight = stdin.nextDouble();
System.out.print("Enter height (feet): ");
double height = stdin.nextDouble();
// convert to metric equivalents
double metricWeight = weight * KILOGRAMS_PER_POUND;
double metricHeight = height * METERS_PER_FOOT;
// perform bmi calculation
double bmi = metricWeight / (metricHeight * metricHeight);
// display result
//...
}
class BMICalculator {
public static void main(String[] args) {
// define constants
final double KILOGRAMS_PER_POUND = 0.454;
final double METERS_PER_FOOT = 0.3046;
// displaying legend
System.out.println ("BMI Calculator\n");
// set up input stream
Scanner stdin = Scanner.create(System.in);
// get person's characteristics
System.out.print("Enter weight (lbs): ");
double weight = stdin.nextDouble();
System.out.print("Enter height (feet): ");
double height = stdin.nextDouble();
// convert to metric equivalents
double metricWeight = weight * KILOGRAMS_PER_POUND;
double metricHeight = height * METERS_PER_FOOT;
// perform bmi calculation
double bmi = metricWeight / (metricHeight * metricHeight);
// display result
System.out.println("A person with");
System.out.println(" weight " + weight + " lbs");
System.out.println(" height " + height + " feet");
System.out.println("has a BMI of " + Math.round(bmi));
}
}
Scanner API
public Scanner(InputStream in)
public Scanner(File s)
// Scanner(): convenience constructor for an
// InputStream
// Scanner(): convenience constructor for a filename
public create(InputStream in)
// create(): convenience construction from an
// InputStream
public static Scanner create(File s)
// Scanner(): convenience construction from a filename
public int nextInt()
// nextInt(): next input value as an int
public short nextShort()
// nextShort(): next input value as a short
public long nextLong()
// nextLong(): next input value as a long
public double nextDouble()
// nextDouble(): next next input value as a double
public float nextFloat()
// nextFloat(): next next input value as a float
public String next()
// next(): get next whitespace-free string
public String nextLine()
// nextLine(): return contents of input line buffer
public boolean hasNext()
// hasNext(): is there a value to next
57
Class fields
class BMICalculator {
public
//
define
static
constants
void main(String[] args) {
final
// define
staticconstants
double KILOGRAMS_PER_POUND = 0.454;
final
final
static
double
double
KILOGRAMS_PER_POUND
METERS_PER_FOOT==0.454;
0.3046;
final double METERS_PER_FOOT = 0.3046;
public static void main(String[] args) {
// displaying legend
System.out.println ("BMI Calculator\n");
//...
}
}
58
Download