CSC Java Programming, Fall, 2008 Week 3: Objects, Classes, Strings, Text I/O, September 11
References GNU make docs. has on-line docs. class lib. /export/home/faculty/parson/JavaLang on bill.kutztown.edu Make sure that /usr/jdk/jdk1.6.0_02/bin is near the front of UNIX PATH. Follow instructions in the JavaShellSetup.pdf document (accessible via my home page at to set up and verify your Java compilation environment.JavaShellSetup.pdfhttp://faculty.kutztown.edu/parson
Multidimensional Arrays int [][] matrix ; // an array of arrays, null int [][] matrix = new int[4][3]; // 4 rows of 3 int [][] matrix = { // See Figure 6.11, p. 204 {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} }; matrix[0][0] is the initial element of the initial row matrix[3][2] is the last element of the last sub-array (last column of the last row)
“Ragged Arrays” int [][] triangle = { // p. 205 {1, 2, 3, 4, 5}, {2, 3, 4, 5}, {3, 4, 5}, {4, 5}, {5} }; int [][] triangle = new int [5][]; for (int i = 0 ; i < triangle.length ; i++) { triangle[i] = new int [triangle.length – i]; } triangle[1].length gives the length of the second sub-array triangle[1], which == 4.
Handling an exception from a library method Read on-line doc on java.lang.Float.parseFloat try { numbers[i] = Float.parseFloat(args[i]); } catch (NumberFormatException nfexp) { System.err.println("format error on " + args[i] + ": " + nfexp.getMessage()); isSortedAnd = false ; isOutOfOrderOr = true ; // Initialize array element to a default value. numbers[i] = 0.0F ; }
Notes on the makefile If you run a test that you intend to fail – System.exit(NON-0) – then put a “-” in front of that command invocation in the makefile. -java $(PACKAGE).$(BASENAME) fred Also, since your error messages are sent to System.err, you need to redirect System.err to a file to capture its output to use with diff. >> $(BASENAME).out 2>&1 >> $(BASENAME).out 2>$(BASENAME).err
Review of qualifiers on methods and data in a class or object public, protected, private or implicit package visibility of each field and method static for data shared by all objects in a class (for example, initialization data), non-static for data that is specific to each object\ final is like const in C++ -- the value may not change
Scrabble! What classes and objects do we need to represent a Scrabble game? What fields would be in these classes? What methods would be in these classes? Here is my first guess. Here is my first guess
Methods within Classes Constructor has same name as class. It may be overloaded, like any method. Each variant has a different set of parameter types. Constructor initializes a new object of the class when new is invoked on the Constructor. An Access Method retrieves data. A Mutator Method modifies an object. There are no Destructors in Java!
Objects and References An object is accessed via a reference, which acts like a pointer in C++. String a = new String(“A”); String b = a ; aString objectb Assignment copies the reference. == compares references (exactly the same object when true) object.equals() compares two objects using an object- specific equals operation.
Reference equality != Object equality public class main { public static void main(String [] args) { String a = new String("A") ; String b = a ; System.out.println("after pointer copy a == b -> “ + String.valueOf(a == b) + ", a.equals(b) -> " + String.valueOf(a.equals(b))); a = new String("A") ; System.out.println("after reconstruction a == b -> “ + String.valueOf(a == b) + ", a.equals(b) -> " + String.valueOf(a.equals(b))); } } $ java strings.PtrCompare after pointer copy a == b -> true, a.equals(b) -> true after reconstruction a == b -> false, a.equals(b) -> true
chars, Characters and Strings A char is a primitive type. A Character is a wrapper class for char. A String is a class known to the compiler. String objects are immutable. “abc” compiles as an interned (unique) String object. StringBuffer is a mutable string class. StringBuilder is a non-multithread-safe, efficient variant of StringBuffer. Conversion methods abound!
A StringBuilder object can serve as a text template String editing operations indexOf() to search delete from start to end-1 replace from start to end – 1 insert before start index replaceCharAt for individual characters /export/home/faculty/parson/JavaLang/strings
Text File I/O import java.io.PrintWriter ; PrintWriter output = new PrintWriter(filepath); print, println and printf (formatted output) methods Just like System.out and System.err. import java.util.Scanner ; java.io.File(filepath) gets at directory information. Scanner input = new Scanner(new File(filepath)); Scanner input = new Scanner(System.in); hasNextTYPE() controls looping over input items. nextTYPE() scans and returns these items.
Programming practices Always handle exceptions! We may handle some by explicitly ignoring them. Always use { curly braces } for control blocks. Use coding standards that we discuss in class. Write Javadoc documentation. Use both healthy and degenerate tests. » Ignoring these rules will cost you points.