CS 145 Lecture 13 – PrintWriter and Patterns
Agenda
- PrintWriter and snowpeople
- the so-far pattern
- doing a word count
- the fencepost pattern
- prompting for a valid file
So-far (Cumulative) pattern
We can only work on one thing at a time. When problems require processing of a set or list, we’ll have to apply the so-far pattern:
init soFar
for each item
update soFar based on item
Fencepost pattern
Suppose we want to print “XOXOXO…X”. A look can’t do this, but a loop-and-a-half can:
do half-step
for some number of steps
do full step
Code
FileWriter.java
package preexam2; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Random; public class FileWriter { public static void main(String[] args) throws FileNotFoundException { PrintWriter out = new PrintWriter("/home/user/Desktop/snowpeople.html"); out.println("<html>"); out.println("<body>"); out.println("<h1>My first SVG</h1>"); out.println("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">"); Random generator = new Random(); for (int i = 0; i < 1000; ++i) { out.println(getSnowperson(generator.nextInt(400), 50)); } out.println("</svg>"); out.println("</body>"); out.println("</html>"); } public static String getSnowperson(int x, int y) { int headRadius = 15; int torsoRadius = 20; int bottomRadius = 30; String bottom = getCircleTag(x, y + headRadius + 2 * torsoRadius + bottomRadius, bottomRadius, "green"); String torso = getCircleTag(x, y + headRadius + torsoRadius, torsoRadius, "green"); String head = getCircleTag(x, y, headRadius, "pink"); // String joined = head + torso + bottom; // return joined; return head + torso + bottom; } public static String getCircleTag(int x, int y, int radius, String color) { return "<circle cx=\"" + x + "\" cy=\"" + y + "\" r=\"" + radius + "\" stroke=\"black\" stroke-width=\"2\" fill=\"" + color + "\" />"; } }
WordXCounter.java
package preexam2; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import javax.swing.JFileChooser; public class WordXCounter { public static void main(String[] args) throws FileNotFoundException { JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File fileToRead = chooser.getSelectedFile(); Scanner in = new Scanner(fileToRead); int szam = 0; // for each word in file { while (in.hasNext()) { in.next(); ++szam; } in.close(); System.out.println("You have " + szam + " words!"); } }
LoveGenerator.java
package preexam2; public class LoveGenerator { public static void main(String[] args) { System.out.println(getXO(1)); System.out.println(getXO(2)); System.out.println(getXO(3)); } public static String getXO(int nX) { String xox = "X"; for (int i = 1; i < nX; ++i) { xox += "OX"; } return xox; } }