Morse Code Lab
Goal
The goal of this project is to write a Java program to convert Morse
Code to English using a Binary Tree.
Overview
The binary tree below can be used to decode
Morse code. Each left child represents a "dot" in the code,
and
each right child represents a "dash." Thus the sequence "..-"
(dot dot dash) decodes to the letter U.
(root)
|
-------------------------
/
\
/
\
/
\
E
T
|
|
---------
--------
/
\
/
\
/
\
/
\
I
A
N
M
/
\
/
\
/
\
/
\
S
U
R
W
D
K
G O
/ \
/
/ /
\ /
\ /
\ / \
H V
F
L P
J B X
C Y Z Q
You are to write a Java class that encapsulates the tree structure
above and provides operations for converting from Morse Code.
Decoding
The morse code text is sequences of dots (periods),
and dashes, separated by blank spaces. At least one blank
character
must separate each "letter" (1 to 4 symbols). Extraneous
blanks (i.e., more than one)
between "letters" are echoed to the output.
Blanks at the beginning or at the end are ignored.
Any non-alphabetic characters are ignored.
English text is output in upper case.
Software Design
Use this classes (modified from Weiss's original): BinaryNode.java
Implement a class named CodeTree, that encapsulates
the tree shown above. It provides a static method for decoding morse
code:
/** Convert a morse code message
to plain english text.
* @param
morseText a string of morse code symbols
* @pre
morseText contains valid morse code symbols.
* @return
String of the decoded english text.
*/
public static String decode(String
morseText)
Sample Test
assertEquals("LIONS
TIGERS",CodeTree.decode(".-.. ..
--- -. ... - .. --. . .-. ..."));
Implementation Constraints
Your solution for decoding morse code must
be implemented using a tree structure as shown above.
That is, each morse code "letter" must be decoded by looking up its
english equivalent in a binary tree like the one shown.
You should build the binary tree in a static initializer
block.
You must use the lookup algorithm presented in lecture.
You do not need to write a driver class.
Testing
Write JUnit tests for the CodeTree class. You do not need to
test Weiss's BinaryNode and BinaryTree.
Tip
Since the only method in the CodeTree class is a static method,
don't expect that someone using your class will invoke the
constructor.
For example, when you use Math.Random(), you don't create a new
Math() beforehand.
So when someone uses CodeTree.encode(), they won't create a new
CodeTree()
beforehand.
To be safe, don't even write a constructor.
Q: OK, then how do I initialize the binary tree?
A: Probably the best way is with a static initializer block.
If you haven't done this before, you can read about it in the
textbook or
here.