## 6 Strings Arrays and Collections Solutions
### 6.1 Print 2D Array
The following code creates a 3 x 3 tic-tac-toe grid filled with Xs.
```java
1: void tictactoe()
2: {
3: String [][] grid = new String[3][3];
4:
5: for(int i = 0; i<grid.length; i++)
6: {
7: for (int j = 0; j<grid.length; j++)
8: {
9: grid[i][j] = "X";
10: }
11: }
12: printArray(grid);
13:
14: }
```
Write a method that will print a 2D array of any size. Test it using the 3 x 3 tic-tac-toe grid given above
#### 6.1.1 Solution
```java
1: public class NNStringArray {
2:
3: NNStringArray()
4: {
5: tictactoe();
6: }
7:
8:
9: void tictactoe()
10: {
11: String [][] grid = new String[3][3];
12:
13: for(int i = 0; i<grid.length; i++)
14: {
15: for (int j = 0; j<grid.length; j++)
16: {
17: grid[i][j] = "X";
18: }
19: }
20: printArray(grid);
21:
22: }
23:
24: void printArray(String [][] grid)
25: {
26: for(int i = 0; i<grid.length; i++)
27: {
28: for(int j = 0; j<grid.length; j++)
29: {
30: System.out.print(" | " + grid[i][j]);
31: }
32: System.out.println(" | ");
33: }
34: }
35:
36: public static void main(String[] args) {
37:
38: new NNStringArray();
39: }
40: }
```
### 6.2 Chess Board
Create an 8 x 8 Array to represent a chess board. Print out the array with alternate 'X' and 'O' entries as shown in the example:
#### 6.2.1 Solution
```java
1: public class NNStringArray {
2:
3: NNStringArray()
4: {
5: chess();
6: }
7:
8: void printArray(String [][] grid)
9: {
10: for(int i = 0; i<grid.length; i++)
11: {
12: for(int j = 0; j<grid.length; j++)
13: {
14: System.out.print(" | " + grid[i][j]);
15: }
16: System.out.println(" | ");
17: }
18: }
19:
20: void chess()
21: {
22: String [][] grid = new String[8][8];
23: boolean fill = true;
24:
25: for(int i = 0; i<grid.length; i++)
26: {
27: for (int j = 0; j<grid.length; j++)
28: {
29: grid[i][j] = fill ? "X" : "O";
30: fill = !fill;
31: }
32: fill = !fill;
33: }
34: printArray(grid);
35: }
36:
37: public static void main(String[] args) {
38:
39: new NNStringArray();
40: }
41: }
```
### 6.3 Digits to Words
Write a method that will convert digits into words
#### 6.3.1 Solution
```java
1: public class NNStringArray {
2:
3: NNStringArray()
4: {
5: System.out.println(digitsToWords("35001922"));
6: }
7:
8: String digitsToWords(String s)
9: {
10: String words = "";
11: String [] digits = {"Oh","One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
12:
13: for (int i = 0; i<s.length();i++)
14: {
15: int number = Integer.parseInt(s.substring(i,i+1));
16: words = words + digits[number] + " ";
17: }
18:
19: return words;
20: }
21: public static void main(String[] args) {
22:
23: new NNStringArray();
24: }
25: }
```
### 6.4 Time to Words
Write a method that will convert time to words. For example, 4:10 is "Ten past four" and 4:55 is "Five to Five"
#### 6.4.1 Solution
```java
1: public class NNStringArray {
2:
3: NNStringArray()
4: {
5: System.out.println(timeToWords("2:05"));
6: System.out.println(timeToWords("2:47"));
7: System.out.println(timeToWords("12:00"));
8: System.out.println(timeToWords("2:00"));
9: System.out.println(timeToWords("12:30"));
10: System.out.println(timeToWords("4:29"));
11: System.out.println(timeToWords("7:25"));
12: System.out.println(timeToWords("12:45"));
13: System.out.println(timeToWords("12:55"));
14: }
15:
16: String timeToWords(String s)
17: {
18: String time = "";
19: String [] input = s.split(":");
20:
21: String [] times = {"o'clock","one","two","three","four", "five", "six",
22: "seven","eight","nine","ten","eleven","twelve","thirteen","fourteen",
23: "quarter","sixteen","seventeen","eighteen","nineteen","twenty",
24: "twenty one","twenty two","twenty three","twenty four",
25: "twenty five","twenty six","twenty seven","twenty eight",
26: "twenty nine","half past"};
27:
28: int hours = Integer.parseInt(input[0]);
29: int minutes = Integer.parseInt(input[1]);
30:
31: //Watch out for e.g. 12:50 = Ten to One
32: String sayMinutesp = minutes%5 != 0 ? " minutes" : "";
33: if (hours == 12 && minutes > 30) hours = 1;
34:
35: if (minutes == 0)
36: {
37: time = times[hours] + " o'clock";
38: }
39: else if (minutes == 15)
40: {
41: time = "Quarter past " + times[hours];
42: }
43: else if (minutes == 45)
44: {
45: time = "Quarter to " + times[hours];
46: }
47: else if (minutes>30)
48: {
49: time = times[60-minutes]+ sayMinutesp + " to " + times[hours];
50: }
51: else
52: {
53: time = times[minutes] + sayMinutesp + " past " + times[hours];
54: }
55:
56: return time;
57: }
58:
59: public static void main(String[] args) {
60:
61: new NNStringArray();
62: }
63: }
```
### 6.5 Morse Code Arrays
Write a program using arrays that translates plain text into morse code.
<table border="2" rules="groups" cellspacing="0" cellpadding="6"><colgroup><col class="left"><col class="left"><col class="left"><col class="left"><col class="left"><col class="left"><col class="left"></colgroup><tbody><tr><td class="left">A</td><td class="left">B</td><td class="left">C</td><td class="left">D</td><td class="left">E</td><td class="left">F</td><td class="left">G</td></tr><tr><td class="left">.-</td><td class="left">-…</td><td class="left">-.-.</td><td class="left">-..</td><td class="left">.</td><td class="left">..-.</td><td class="left">–.</td></tr><tr><td class="left">H</td><td class="left">I</td><td class="left">J</td><td class="left">K</td><td class="left">L</td><td class="left">M</td><td class="left"></td></tr><tr><td class="left">….</td><td class="left">..</td><td class="left">.---</td><td class="left">-.-</td><td class="left">.-..</td><td class="left">--</td><td class="left"></td></tr><tr><td class="left">N</td><td class="left">O</td><td class="left">P</td><td class="left">Q</td><td class="left">R</td><td class="left">S</td><td class="left">T</td></tr><tr><td class="left">-.</td><td class="left">---</td><td class="left">.–.</td><td class="left">–.-</td><td class="left">.-.</td><td class="left">…</td><td class="left">-</td></tr><tr><td class="left">U</td><td class="left">V</td><td class="left">W</td><td class="left">X</td><td class="left">Y</td><td class="left">Z</td><td class="left"></td></tr><tr><td class="left">..-</td><td class="left">…-</td><td class="left">.--</td><td class="left">-..-</td><td class="left">-.--</td><td class="left">__..</td><td class="left"></td></tr></tbody></table>
#### 6.5.1 Solution
```java
1: public class NNStringArray {
2:
3: NNStringArray()
4: {
5: System.out.println(morse("I never saw a purple cow"));
6: }
7:
8: String morse(String s)
9: {
10: s = s.toLowerCase();
11: String cipherText = "";
12: String code [] = {".-","-...","-.-.","-..",".","..-.","--.", "....",
13: "..", ".---","-.-",".-..","--","-.","---",".--.","--.-",".-.",
14: "...","-","..-","...-",".--","-..-","-.--","--..", "/"};
15:
16: for (int i = 0; i<s.length(); i++)
17: {
18: int number = s.charAt(i) == ' ' ? 26 : s.charAt(i)-97;
19: cipherText = cipherText + code[number] + " ";
20: }
21:
22: return cipherText;
23: }
24: public static void main(String[] args) {
25:
26: new NNStringArray();
27: }
28: }
```
### 6.6 Demorse Code Arrays
Now write a program using arrays that translates morse back to plain text.
#### 6.6.1 Solution
```java
1: public class NNStringArray {
2:
3: NNStringArray()
4: {
5: System.out.println(demorse(".. / -. . ...- . .-. / ... .- .-- / .- / .--. ..- .-. .--. .-.. . / -.-. --- .--"));
6: }
7:
8: String demorse(String s)
9: {
10: s = s.toLowerCase();
11: String cipher = "";
12: String code [] = {".-","-...","-.-.","-..",".","..-.","--.", "....",
13: "..", ".---","-.-",".-..","--","-.","---",".--.","--.-",".-.",
14: "...","-","..-","...-",".--","-..-","-.--","--..", "/"};
15:
16: String [] letters = s.split("s+");
17: String plainText= "";
18:
19:
20: for (int i = 0; i<letters.length;i++)
21: {
22: String letter = letters[i].trim();
23: if (letter.equals("/"))
24: {
25: plainText = plainText + " ";
26: }
27: else
28: {
29: String decode = "";
30: for(int j = 0; j <code.length; j++)
31: {
32: if (letter.equals(code[j]))
33: {
34: char c = (char)(j+97);
35: plainText = plainText + Character.toString(c);
36: }
37: }
38: }
39: }
40:
41: return plainText;
42: }
43:
44: public static void main(String[] args) {
45:
46: new NNStringArray();
47: }
48: }
```
### 6.7 Morse Code Hashmap
Rewrite the Morse Code program using Hashmap
#### 6.7.1 Solution
```java
1: import java.util.HashMap;
2: import java.util.Map;
3: import java.util.Map.Entry;
4:
5: public class NNStringArray {
6:
7: Map <String, String> morse = new HashMap<String, String>();
8:
9: NNStringArray()
10: {
11: morse.put("a" , ".-");
12: morse.put("b" , "-...");
13: morse.put("c" , "-.-.");
14: morse.put("d" , "-..");
15: morse.put("e" , ".");
16: morse.put("f" , "..-.");
17: morse.put("g" , "--.");
18: morse.put("h" , "....");
19: morse.put("i" , "..");
20: morse.put("j" , ".---");
21: morse.put("k" , "-.-");
22: morse.put("l" , ".-..");
23: morse.put("m" , "--");
24: morse.put("n" , "-.");
25: morse.put("o" , "---");
26: morse.put("p" , ".--.");
27: morse.put("q" , "--.-");
28: morse.put("r" , ".-.");
29: morse.put("s" , "...");
30: morse.put("t" , "-");
31: morse.put("u" , "..-");
32: morse.put("v" , "...-");
33: morse.put("w" , ".--");
34: morse.put("x" , "-..-");
35: morse.put("y" , "-.--");
36: morse.put("z" , "--..");
37: morse.put(" " , "/");
38:
39: System.out.println(morseHash("I never saw a purple cow"));
40: }
41:
42: String morseHash(String s)
43: {
44: s = s.toLowerCase();
45: String cipherText = "";
46:
47: for (int i = 0; i<s.length(); i++)
48: {
49: cipherText = cipherText + morse.get(s.substring(i,i+1)) + " ";
50:
51: }
52:
53: return cipherText;
54: }
55:
56: public static void main(String[] args) {
57:
58: new NNStringArray();
59: }
60: }
```
### 6.8 Demorse Code Hashmap
Rewrite the Demorse Code program using Hashmap
#### 6.8.1 Solution
```java
1: import java.util.HashMap;
2: import java.util.Map;
3: import java.util.Map.Entry;
4:
5: public class NNStringArray {
6:
7: Map <String, String> morse = new HashMap<String, String>();
8:
9: NNStringArray()
10: {
11: morse.put("a" , ".-");
12: morse.put("b" , "-...");
13: morse.put("c" , "-.-.");
14: morse.put("d" , "-..");
15: morse.put("e" , ".");
16: morse.put("f" , "..-.");
17: morse.put("g" , "--.");
18: morse.put("h" , "....");
19: morse.put("i" , "..");
20: morse.put("j" , ".---");
21: morse.put("k" , "-.-");
22: morse.put("l" , ".-..");
23: morse.put("m" , "--");
24: morse.put("n" , "-.");
25: morse.put("o" , "---");
26: morse.put("p" , ".--.");
27: morse.put("q" , "--.-");
28: morse.put("r" , ".-.");
29: morse.put("s" , "...");
30: morse.put("t" , "-");
31: morse.put("u" , "..-");
32: morse.put("v" , "...-");
33: morse.put("w" , ".--");
34: morse.put("x" , "-..-");
35: morse.put("y" , "-.--");
36: morse.put("z" , "--..");
37: morse.put(" " , "/");
38:
39: System.out.println(demorseHash(".. / -. . ...- . .-. / ... .- .-- / .- / .--. ..- .-. .--. .-.. . / -.-. --- .--"));
40:
41: }
42:
43:
44: String demorseHash(String s)
45: {
46: String [] letters = s.split("s+");
47: String plaintext = "";
48:
49: for (int i = 0; i<letters.length; i++)
50: {
51: for (Entry<String, String> entry : morse.entrySet()) {
52: if (entry.getValue().equals(letters[i])) {
53: plaintext = plaintext + entry.getKey();
54: }
55: }
56: }
57: return plaintext;
58: }
59:
60: public static void main(String[] args) {
61:
62: new NNStringArray();
63: }
64: }
```