From a629d66ea36eee73c901cd70c5bde954c7f10dfe Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Fri, 21 Mar 2014 13:42:15 -0400 Subject: [PATCH 1/8] Swing Sandbox This is a sample Swing program that has a button and a label. Use this program to try the different Swing components. --- SwingSandbox/README.txt | 1 + SwingSandbox/SwingSandbox.java | 110 +++++++++++++++++++++++++++++++++ SwingSandbox/screenshot.png | Bin 0 -> 10442 bytes 3 files changed, 111 insertions(+) create mode 100644 SwingSandbox/README.txt create mode 100644 SwingSandbox/SwingSandbox.java create mode 100644 SwingSandbox/screenshot.png diff --git a/SwingSandbox/README.txt b/SwingSandbox/README.txt new file mode 100644 index 0000000..90de301 --- /dev/null +++ b/SwingSandbox/README.txt @@ -0,0 +1 @@ +This program is a sandbox for trying out Java Swing components. It features a button and a label. When the button is pressed, the label is updated. There is a listener to capture the window closing event, as well as the button press event. \ No newline at end of file diff --git a/SwingSandbox/SwingSandbox.java b/SwingSandbox/SwingSandbox.java new file mode 100644 index 0000000..ea0c36b --- /dev/null +++ b/SwingSandbox/SwingSandbox.java @@ -0,0 +1,110 @@ +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; + +/** + * Author: Edwin Torres + * email: CoachEd@gmail.com + * + * Description: This program is a sandbox for trying out Java Swing components. + * It features a button and a label. When the button is pressed, the label + * is updated. There is a listener to capture the window closing event, as well + * as the button press event. + */ +public class SwingSandbox implements ActionListener, WindowListener { + + private JButton button; + private JLabel label; + private int numPresses = 0; + + /** create your Swing UI */ + private void createAndShowGUI() { + + /** the main frame */ + JFrame frame = new JFrame("Main"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setPreferredSize(new Dimension(225,125)); + frame.setLayout(new FlowLayout()); + + /** here is the content pane of the main frame */ + Container container = frame.getContentPane(); + + + /** add your Swing components here */ + label = new JLabel("Number of presses: " + numPresses); + container.add(label); + + button = new JButton("Press me"); + button.addActionListener(this); + button.setPreferredSize(new Dimension(90,30)); + container.add(button); + + + /** show the frame to the user */ + frame.pack(); + frame.setVisible(true); + } + + public static void main(String[] args) { + + final SwingSandbox sandbox = new SwingSandbox(); + + /** schedule for the event dispatcher */ + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + sandbox.createAndShowGUI(); + } + }); + } + + @Override + public void windowClosing(WindowEvent e) { + /** executed when the user closes the window. + * put cleanup code here. + */ + + System.out.println("Bye."); + } + + @Override + public void windowOpened(WindowEvent e) { + } + + @Override + public void windowClosed(WindowEvent e) { + } + + @Override + public void windowIconified(WindowEvent e) { + } + + @Override + public void windowDeiconified(WindowEvent e) { + } + + @Override + public void windowActivated(WindowEvent e) { + } + + @Override + public void windowDeactivated(WindowEvent e) { + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == button) { + numPresses++; + label.setText("Number of presses: " + numPresses); + } + + } + +} diff --git a/SwingSandbox/screenshot.png b/SwingSandbox/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ca08dc70488dda202e6fe7003d07d476599cce04 GIT binary patch literal 10442 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 G`2Rngu59K2 literal 0 HcmV?d00001 From 2f7c25765f931d94bc6364bd8dd9cf0525d05fd6 Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Tue, 25 Mar 2014 11:46:42 -0400 Subject: [PATCH 2/8] Factorial With Memory The FactorialMemory class illustrates how to calculate the factorial value recursively. This is a classic example of recursion in computer science. However, this factorial method saves previously learned values. For example, if 10! is computed, then a subsequent call to 7! is a simple lookup. --- FactorialMemory/FactorialMemory.java | 72 ++++++++++++++++++++++++++++ FactorialMemory/README.txt | 1 + 2 files changed, 73 insertions(+) create mode 100644 FactorialMemory/FactorialMemory.java create mode 100644 FactorialMemory/README.txt diff --git a/FactorialMemory/FactorialMemory.java b/FactorialMemory/FactorialMemory.java new file mode 100644 index 0000000..cd99c55 --- /dev/null +++ b/FactorialMemory/FactorialMemory.java @@ -0,0 +1,72 @@ +import java.util.HashMap; + +/** + * @author Edwin Torres + * email CoachEd@gmail.com + * + * Description: This is a smart factorial class. It computes + * the factorial recursively and saves values along the way. + * If an existing factorial was already computed, it returns + * that value, instead of computing it again. + */ + +public class FactorialMemory { + + /* + * This HashMap stores known factorial values + */ + private static HashMap hmAnswers; + + public FactorialMemory() { + + //create the initial HashMap + hmAnswers = new HashMap(); + } + + /* + * This is the recursive method to compute the factorial. + * It retrieves already learned factorial values and + * stores new ones. + */ + public long factorialMem(int i) { + if (i == 1) + return 1; + else { + long val; + if (hmAnswers.containsKey(i-1)) { + val = hmAnswers.get(i-1); + } else { + val = factorialMem(i-1); + hmAnswers.put(i-1, val); + } + + return i * val; + } + } + + /* + * This is the driver method to compute the factorial. + * It retrieves the factorial value if it exists and + * computes/stores the factorial value if it doesn't. + */ + public long doFactorial(int i) { + long val; + if (hmAnswers.containsKey(i)) { + return hmAnswers.get(i); + } else { + val = factorialMem(i); + hmAnswers.put(i, val); + return val; + } + } + + public static void main(String[] args) { + + FactorialMemory fm = new FactorialMemory(); + System.out.println(fm.doFactorial(4)); + System.out.println(fm.doFactorial(10)); + System.out.println(fm.doFactorial(8)); + + } + +} diff --git a/FactorialMemory/README.txt b/FactorialMemory/README.txt new file mode 100644 index 0000000..11ef6ec --- /dev/null +++ b/FactorialMemory/README.txt @@ -0,0 +1 @@ +The FactorialMemory class illustrates how to calculate the factorial value recursively. This is a classic example of recursion in computer science. However, this factorial method saves previously learned values. For example, if 10! is computed, then a subsequent call to 7! is a simple lookup. \ No newline at end of file From d3549b2d75d314231fb19206903465099617f394 Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Wed, 26 Mar 2014 11:53:01 -0400 Subject: [PATCH 3/8] Added file validation Make sure the file exists before trying to read it. --- ReadTextFileExample/ReadTextFile.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ReadTextFileExample/ReadTextFile.java b/ReadTextFileExample/ReadTextFile.java index 1c9c399..80d078f 100644 --- a/ReadTextFileExample/ReadTextFile.java +++ b/ReadTextFileExample/ReadTextFile.java @@ -1,4 +1,5 @@ import java.io.BufferedReader; +import java.io.File; import java.io.FileReader; import java.io.IOException; @@ -16,6 +17,13 @@ public static void main(String[] args) { String fileFullPath = "C:\\Temp\\data.txt"; + /** verify that file exists */ + File checkFile = new File(fileFullPath); + if (!checkFile.exists()) { + System.err.println("error - file does not exist"); + System.exit(0); + } + BufferedReader br = null; try { String line; From 34d9fe85e0c4e2a844a4fcb2ad83a30f396a6480 Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Wed, 26 Mar 2014 13:24:06 -0400 Subject: [PATCH 4/8] CSV Parser This program parses a CSV (comma-separated values) file and stores the information in two ArrayList objects. The first ArrayList stores the column names (if present). The second ArrayList stores the records. This program takes two parameters: [full path filename] [true|false header present]. --- CsvParser/CsvParser.java | 151 +++++++++++++++++++++++++++++++++++++++ CsvParser/README.txt | 18 +++++ CsvParser/addresses.csv | 5 ++ 3 files changed, 174 insertions(+) create mode 100644 CsvParser/CsvParser.java create mode 100644 CsvParser/README.txt create mode 100644 CsvParser/addresses.csv diff --git a/CsvParser/CsvParser.java b/CsvParser/CsvParser.java new file mode 100644 index 0000000..67a767e --- /dev/null +++ b/CsvParser/CsvParser.java @@ -0,0 +1,151 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; + +/* + * Author: Edwin Torres + * email: CoachEd@gmail.com + * + * This class parses an incoming CSV (comma-separated values) file + * and stores the values in Java objects. The file may or may not + * have a header row (column names). A command line argument indicates + * the presence of a header row. + */ + +public class CsvParser { + + private boolean bHeaderRow = false; + + private String sFileFullPath = ""; + private ArrayList> alData; + private ArrayList alColNames; + + /* + * Custom constructor. + */ + public CsvParser(String f, String b) { + + /** check for null arguments */ + if (f == null || b == null) { + System.err.println("error - argument is null"); + System.exit(0); + } + + /** set properties */ + bHeaderRow = new Boolean(b); + sFileFullPath = f; + + /** verify that the file exists */ + File checkFile = new File(sFileFullPath); + if (!checkFile.exists()) { + System.err.println("error - file does not exist: " + sFileFullPath); + System.exit(0); + } + + /** initialize our data structures */ + alData = new ArrayList>(); + alColNames = new ArrayList(); + + } + + /* + * This method parses the incoming file and stores the data in two ArrayLists. + * The first ArrayList stores the column names (if present). + * The second ArrayList is an ArrayList of ArrayList. It stores the record + * data. + */ + public void parse() { + + BufferedReader br = null; + boolean bSeenHeader = false; + try { + String line; + br = new BufferedReader(new FileReader(sFileFullPath)); + + /** read entire lines, one at a time */ + while ((line = br.readLine()) != null) { + + if (bHeaderRow && !bSeenHeader) { + /** process the header row */ + alColNames = new ArrayList(Arrays.asList(line.split(","))); + bSeenHeader = true; + } else { + /** process normal rows */ + String arr[] = line.split(","); + alData.add(new ArrayList(Arrays.asList(arr))); + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (br != null) + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /* + * Print the data nicely. + */ + public void printData() { + + if (bHeaderRow) { + System.out.println("Column names:"); + for (int i=0; i < alColNames.size()-1; i++) { + System.out.print(alColNames.get(i) + ","); + } + System.out.println(alColNames.get(alColNames.size()-1)); + System.out.println(); + } + + System.out.println("Data:"); + for (int i=0; i < alData.size(); i++) { + ArrayList al = alData.get(i); + for (int j=0; j < al.size()-1; j++) { + System.out.print(al.get(j) + ","); + } + System.out.println(al.get(al.size()-1)); + } + } + + /** + * Main driver program. + * + * @param args the incoming arguments + */ + public static void main(String[] args) { + + if (args.length != 2) { + System.out.println("usage: java CsvParser [full path filename] [true|false header row]"); + return; + } + + CsvParser parser = new CsvParser(args[0], args[1]); + parser.parse(); + parser.printData(); + + } + + public boolean isHeaderRowPresent() { + return bHeaderRow; + } + + public void setHeaderRowPresent(boolean bHeaderRow) { + this.bHeaderRow = bHeaderRow; + } + + public String getsFileFullPath() { + return sFileFullPath; + } + + public void setsFileFullPath(String sFileFullPath) { + this.sFileFullPath = sFileFullPath; + } + +} diff --git a/CsvParser/README.txt b/CsvParser/README.txt new file mode 100644 index 0000000..81e68e5 --- /dev/null +++ b/CsvParser/README.txt @@ -0,0 +1,18 @@ +This program parses a CSV (comma-separated values) file and stores the information in two ArrayList objects. The first ArrayList stores the column names (if present). The second ArrayList stores the records. This program takes two parameters: [full path filename] [true|false header present]. + +A sample input file, called addresses.csv, is included. + +Here is a sample run: + +c:\Temp>java CsvParser addresses.csv true +Column names: +Name,Street,City,State,Zip,Phone + +Data: +John Smith,21 Pine Street,Detroit,Michigan,48126,111-222-3333 +Mary Jones,11 Red Avenue,Orlando,Florida,32801,222-444-6666 +Paul James,18 Main Street,Los Angeles,California,90004,555-222-1111 +Sara Roberts,32 Bourbon Street,Jackson,Mississipi,39201,999-222-7777 + +c:\Temp> + diff --git a/CsvParser/addresses.csv b/CsvParser/addresses.csv new file mode 100644 index 0000000..6e5c619 --- /dev/null +++ b/CsvParser/addresses.csv @@ -0,0 +1,5 @@ +Name,Street,City,State,Zip,Phone +John Smith,21 Pine Street,Detroit,Michigan,48126,111-222-3333 +Mary Jones,11 Red Avenue,Orlando,Florida,32801,222-444-6666 +Paul James,18 Main Street,Los Angeles,California,90004,555-222-1111 +Sara Roberts,32 Bourbon Street,Jackson,Mississipi,39201,999-222-7777 From 70395fd7082100054397ec222a6fbfaa0bfa00f8 Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Wed, 26 Mar 2014 14:29:14 -0400 Subject: [PATCH 5/8] Custom Collection Sort This simple example demonstrates how to use a Comparator to define a custom sort order. This program sorts an ArrayList of String objects. Each String object starts with a number and a space. The list is sorted by those numbers in ascending order. --- .../CustomCollectionSort.java | 52 +++++++++++++++++++ CustomCollectionSort/README.txt | 3 ++ 2 files changed, 55 insertions(+) create mode 100644 CustomCollectionSort/CustomCollectionSort.java create mode 100644 CustomCollectionSort/README.txt diff --git a/CustomCollectionSort/CustomCollectionSort.java b/CustomCollectionSort/CustomCollectionSort.java new file mode 100644 index 0000000..df6baaa --- /dev/null +++ b/CustomCollectionSort/CustomCollectionSort.java @@ -0,0 +1,52 @@ +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +/* + * Author: Edwin Torres + * email: CoachEd@gmail.com + * + * This class demonstrates the use of a Comparator to implement + * a custom sort. The strings are made up of a number followed by a space + * and text. For example: "10 miles", "30 miles", "500 miles", "100 miles" + * The collection is sorted by the number (not the text) in ascending order. + */ +public class CustomCollectionSort implements Comparator { + + @Override + public int compare(String s1, String s2) { + String[] arr = s1.split("\\s"); + int i1 = Integer.parseInt(arr[0]); + + arr = s2.split("\\s"); + int i2 = Integer.parseInt(arr[0]); + + /** return the correct comparator value */ + if(i1 < i2) { + return -1; /* s1 < s2 */ + } else if (i1 > i2) { + return 1; /* s1 > s2 */ + } else { + return 0; /* s1 == s2 */ + } + } + + /** + * @param args + */ + public static void main(String[] args) { + + ArrayList al = new ArrayList(); + al.add("10 miles"); + al.add("100 miles"); + al.add("30 miles"); + al.add("10 miles"); + al.add("4 miles"); + + CustomCollectionSort ccs = new CustomCollectionSort(); + Collections.sort(al, ccs); + + System.out.println(al); + } + +} diff --git a/CustomCollectionSort/README.txt b/CustomCollectionSort/README.txt new file mode 100644 index 0000000..1838605 --- /dev/null +++ b/CustomCollectionSort/README.txt @@ -0,0 +1,3 @@ +This simple example demonstrates how to use a Comparator to define a custom sort order. This program sorts an ArrayList of String objects. Each String object starts with a number and a space. The list is sorted by those numbers in ascending order. + +For example, the following list: "10 miles", "100 miles", "30 miles", "10 miles", "4 miles" would be sorted in this order: "4 miles", "10 miles", "10 miles", "30 miles", "100 miles" \ No newline at end of file From 7a1b580287da4527950044c9e6650d28f427b0fc Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Thu, 27 Mar 2014 10:09:32 -0400 Subject: [PATCH 6/8] Array Multiply Interview Question This program is in response to an actual programming interview question. Given an array of integers, return a new array whose elements are the product of every other integer except the one at the current index. --- .../ArrayMultiplyQuestion.java | 38 +++++++++++++++++++ ArrayMultiplyQuestion/README.txt | 3 ++ 2 files changed, 41 insertions(+) create mode 100644 ArrayMultiplyQuestion/ArrayMultiplyQuestion.java create mode 100644 ArrayMultiplyQuestion/README.txt diff --git a/ArrayMultiplyQuestion/ArrayMultiplyQuestion.java b/ArrayMultiplyQuestion/ArrayMultiplyQuestion.java new file mode 100644 index 0000000..1d9a944 --- /dev/null +++ b/ArrayMultiplyQuestion/ArrayMultiplyQuestion.java @@ -0,0 +1,38 @@ + +/* + * Author: Edwin Torres + * email: CoachEd@gmail.com + * + * This program is in response to an actual programming + * interview question. Given an array of integers, + * return a new array whose elements are the product of + * every other integer except the one at the current index. + * For example, given an input array: [4,2,3,1], the corresponding + * output array would be: [2*3*1,4*3*1,4*2*1,4*2*3] or [6,12,8,24]. + * + * One algorithm to solve this is to compute the full product, + * walk the array, and divide the full product by the current element. + */ +public class ArrayMultiplyQuestion { + + public static void main(String[] args) { + int[] arr = new int[]{4,2,3,1}; + int[] newarr = new int[arr.length]; + + /** compute the full product */ + int product = 1; + for (int i=0; i < arr.length; i++) { + product = product * arr[i]; + } + + /** walk the original array and divide the full product + * along the way. + */ + for (int i=0; i < arr.length; i++) { + newarr[i] = product / arr[i]; + System.out.print(newarr[i] + " "); + } + + } + +} diff --git a/ArrayMultiplyQuestion/README.txt b/ArrayMultiplyQuestion/README.txt new file mode 100644 index 0000000..b8bfbcb --- /dev/null +++ b/ArrayMultiplyQuestion/README.txt @@ -0,0 +1,3 @@ +This program is in response to an actual programming interview question. Given an array of integers, return a new array whose elements are the product of every other integer except the one at the current index. For example, given an input array: [4,2,3,1], the corresponding output array would be: [2*3*1,4*3*1,4*2*1,4*2*3] or [6,12,8,24]. + +One algorithm to solve this is to compute the full product, walk the array, and divide the full product by the current element. \ No newline at end of file From c609f1cd71f7de2be85ba39fb12cdf484e9c7734 Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Thu, 15 May 2014 10:32:37 -0400 Subject: [PATCH 7/8] PanelGraphics A simple program that uses the Graphics object to draw text on a JPanel --- PanelGraphics/PanelGraphics.java | 35 +++++++++++++++++++++++++++++++ PanelGraphics/README.txt | 1 + PanelGraphics/screenshot.png | Bin 0 -> 15727 bytes 3 files changed, 36 insertions(+) create mode 100644 PanelGraphics/PanelGraphics.java create mode 100644 PanelGraphics/README.txt create mode 100644 PanelGraphics/screenshot.png diff --git a/PanelGraphics/PanelGraphics.java b/PanelGraphics/PanelGraphics.java new file mode 100644 index 0000000..9f61e19 --- /dev/null +++ b/PanelGraphics/PanelGraphics.java @@ -0,0 +1,35 @@ +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import javax.swing.JFrame; +import javax.swing.JPanel; + +/** + * Author: Edwin Torres + * email: CoachEd@gmail.com + * + * Description: This program shows how to use the Graphics object + * to write Hello World! in a JPanel. + */ +public class PanelGraphics extends JPanel { + + private static final long serialVersionUID = 6615291965888806768L; + + public void paintComponent(Graphics g) { + + /** for example */ + g.setColor(Color.blue); + Font font = new Font("Serif", Font.BOLD, 48); + g.setFont(font); + g.drawString("Hello World!", 20, 50); + + } + + public static void main(String args[]) { + JFrame frame = new JFrame(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add(new PanelGraphics()); + frame.setSize(400, 250); + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/PanelGraphics/README.txt b/PanelGraphics/README.txt new file mode 100644 index 0000000..92d7f4f --- /dev/null +++ b/PanelGraphics/README.txt @@ -0,0 +1 @@ +This is a simple example that shows how to use the Graphics object to draw text on a JPanel. \ No newline at end of file diff --git a/PanelGraphics/screenshot.png b/PanelGraphics/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9102ec2cdafe5963b91ed7e0cf1f28a2a5afde GIT binary patch literal 15727 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 S+kuay&uDAts~4%Fu>S}Ak;E(j literal 0 HcmV?d00001 From 6e87ff97bc43a8ea7ffb283bdd2c022f8187d46a Mon Sep 17 00:00:00 2001 From: Edwin Torres Date: Thu, 15 May 2014 10:33:53 -0400 Subject: [PATCH 8/8] Create README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..1738958 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +JavaExamples +============ + +Various Java code samples, tutorials, etc.