Transcript Lecture 7

CS 201 Lecture 7:
John Hurley
Summer 2012
Cal State LA
Programming Errors
 Syntax Errors
 Incorrect Java. An IDE will warn you about these, but at a
command line, they would be detected by the compiler; also
called "compiler errors"
 Runtime Errors
 Cause the program to abort; in CS202 you will learn how to
manage many of these to avoid program crashes.
 Logic Errors
 Produce incorrect results
2
Syntax Error
public class Errors{
public static void main(String[] args){
int i = 1
System.out.println(i);
}
}
3
Runtime Error
public class Errors{
public static void main(String[] args){
int y = 10;
for(int x = 0; x <=10; x++){
y -= 1;
System.out.println(10 / y);
}
}
}
4
Logic Error
public class PowerError{
public static void main(String[] args){
int answer = 1;
for(int power = 0; power <= 10; power++){
answer = answer * 2;
System.out.println("2 ^ " + power + " = " +
answer);
}
}
5
}
Test Your Work
 It is easy to test our programs in which there is only one
sequence the computer can follow:
public class Power{
public static void main(String[] args){
int answer = 1;
for(int power = 0; power <= 10; power++){
System.out.println("2 ^ " + power + " = " + answer);
answer = answer * 2;
}
}
}
Test Your Work
 At this point, we are writing programs that take user input
 Users are human beings
 The next slide shows a statistically representative sample of
human beings
Test Your Work
 Program execution becomes more complex when unpredictable
human beings intervene
 Make sure to test thoroughly
 The success rate of untested programs is close to 0
 We have it easy. Testing involves saving, compiling, and running
on a machine that is at our fingertips; it hasn’t always been that
way.
Dialog Boxes
 GUI construction is taught in CS202, but we will cover a few
GUI rudiments in 201
 The first is the JOptionPane class, which provides pop-up I/O
boxes of several kinds
 Need to include this at the very top of your class:
 import javax.swing.JOptionPane;
 JOptionPane.showMessageDialog()
 displays a dialog box with text you specify
Dialog Boxes
import javax.swing.JOptionPane;
public class DialogBox{
public static void main(String[] args){
for(int i = 0; i < 4; i++)
{
JOptionPane.showMessageDialog(null, "This is
number " + i);
}
}
}
Dialog Boxes
 JOptionPane.showInputDialog() shows a dialog box that can
take input
 The input is a String
 We will learn soon how to parse from String to other types
Dialog Boxes
import javax.swing.JOptionPane;
public class InputBox{
public static void main(String[] args){
String input = JOptionPane.showInputDialog(null, "Please enter some
input ");
JOptionPane.showMessageDialog(null, "You entered: \"" + input +
"\"");
String input2 = input.concat(" " + JOptionPane.showInputDialog(null,
"Please enter some more input "));
JOptionPane.showMessageDialog(null, "You entered: \"" + input2 +
"\"");
}
}
Casting Strings to Numeric Types
 Recall that input from
JOptionPane.showInputDialog is a String
 Cast to integer: Integer.parseInt(intString);
 Example:
 String input =
 int age = Integer.parseInt(JOptionPane.
showInputDialog(null, “Please enter your age”);
 Cast to double: Double.parseDouble(doubleString);
Casting to Numeric Types
 Note the capitalization in the method names.
Double and Integer are not quite the same as double
and integer.
 You’ll understand when you are a little older…
Parsing to Integer
import javax.swing.JOptionPane;
public class NumericCastDemo{
public static void main(String[] args){
int age =
Integer.parseInt(JOptionPane.showInputDialog(null,
"Please enter your age"));
if(age < 30)
JOptionPane.showMessageDialog(null, age + " is
pretty young.");
else if(age > 100) JOptionPane.showMessageDialog(null, "really?");
else JOptionPane.showMessageDialog(null, "That's OK. Methuseleh lived to be " +
(270 - age) +
" years older than you are now.");
} // end main()
} // end class
Parsing to Double
import javax.swing.JOptionPane;
public class NumericCastDemo{
public static void main(String[] args){
double age = Double.parseDouble(JOptionPane.showInputDialog(null, "Please
enter your age"));
if(age < 30)
JOptionPane.showMessageDialog(null, age + " is pretty young.");
else if(age > 100) JOptionPane.showMessageDialog(null, "really?");
else JOptionPane.showMessageDialog(null, "That's OK. Methuseleh lived to be " +
(270 / age) +
" times as old as you are now.");
} // end main()
} // end class
Imports
 We have already discussed javax.swing.JOptionPane
methods to show input and message dialogs
 These required the following line at the top of the class:
 Import javax.swing.JOptionPane;
 If you omit this line, you will get an error message like
this:
SwitchDemo.java: 7: cannot find symbol
Symbol:variable JOptionPane
Imports
 Java classes are organized in packages
 Late in this class or early in CS202 you will start using
packages for multiple classes
 javax.swing is a package of GUI-related classes
that is included with all distributions of Java
 JOptionPane is a class within this package
 JOptionPane.showMessageDialog() and
JOptionPane.showInputDialog are methods of the
class
Imports
 Including a package in your program adds a small cost,
slowing down the compiler as it looks through the
imported package
 Thus, things like javax.swing are not included
automatically; you must specify that you need them
 You will eventually be importing your own packages,
too.
 Don’t leave unused imports in your code
Validating Data Type
 We have already discussed how to make sure that
numeric input from Scanner is within a desired range
int age;
do {
System.out.println("How old are you?");
age = sc.nextInt();
} while (age < 0 || age > 100);
Validating Scanner Input
 So far, our programs have crashed if casts to numeric
types failed:
 Try this with input “two point five”:
import java.util.Scanner;
public class ReadDouble2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Double stuff = 0.0;
do {
System.out.print("Input a double. Enter 0 to quit:");
stuff = input.nextDouble();
System.out.println("\nYou entered: " + stuff);
} while (stuff != 0.0);
}
}
Validating Scanner Input
 Here is the simplest way to validate Scanner input for
data type (that is, to make sure you get input that can be
cast to double, integer, etc.)
 Scanner has hasNext…() methods that see if there is a
parseable token
 hasNextInt()
 hasNextDouble()
 hasNextBoolean()
 Also need nextLine() to skip over bad input
Validating Scanner Input
 Try this one with input “nine.three”, then with input
“nine point three:
import java.util.Scanner;
public class ReadDouble3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Double inpDouble = 10.0;
// bad code ahead!!
do {
System.out.print("Input a double. Enter 0 to quit:");
if(input.hasNextDouble()){
inpDouble = input.nextDouble();
System.out.println("\nYou entered: " + inpDouble);
}
else input.next();
} while (inpDouble != 0.0);
}
}
Validating Scanner Input
 In order to get good output, we need to arrange things in a slightly more complex way:
Scanner sc = new Scanner(System.in);
int x;
String badInputString = null;
System.out.println("Enter an integer");
while (!sc.hasNextInt()) {
badInputString = sc.nextLine();
+ " isn't an integer! Please try
}
x = sc.nextInt();
System.out.println(x);
System.out.println(badInputString
again.");
Validating Both Type and Value
int value = 0;
String badInputString = null;
do {
System.out.println("Enter an integer greater than 100");
while (!(sc.hasNextInt())) {
badInputString = sc.nextLine();
System.out.println(badInputString + " isn't an integer! Please try
again.");
}
value = sc.nextInt();
sc.nextLine(); // throw awqay linefeed
} while (value <= 100);
System.out.println(value);
Documentation From Oracle
 When you need a reference source for something like
Scanner, look it up in Oracle’s excellent online
documentation
 Example: Google +Java +Scanner
 Follow the link to
http://doc.java.sun.com/DocWeb/api/java.util.Scanner