开发者

Help with Morse Code Java assignment!

The value for the Morse Code translation keeps returning null and I've done everything I can think of to fix it. We are restricted to using arrays on this assignment. What can I do to correct it?

import j开发者_JAVA百科avax.swing.JOptionPane;
import java.util.*;
import java.io.*;

public class morseCodeTest
{
    public static void main(String[] args)throws IOException
    {
        String userInput;
        final String SENTINEL = "0";//for exiting program when entered

        //object creation
        Translate text = new Translate();

        //getting user input to be translated
        do
        {
            userInput = JOptionPane.showInputDialog("Please enter what you wish to translte to Morse code (no punctuation).");
            String compare = userInput.toUpperCase();
            String[] codedText = new String[compare.length()];

            codedText = text.translateHere(compare);
            text.toString(userInput, codedText);
        }while(!userInput.equals(SENTINEL));
    }//end main
}//end class

class Translate
{
    public Translate()
    {
    }//end default constructor

    public String[] translateHere(String s)throws IOException
    {
        String compare = s, codedLine = "";  //userInput toUpperCase
        int length = compare.length();  //length of userInput
        String line, file = "Morse.txt";// variable holding file name and variable for each letter/number
        char code;

        //Constants
        final int MAX = 36;

        //Arrays
        char[] morseLetter = new char[MAX];
        String[] morseCode = new String[MAX];
        String[] newMessage = new String[length];

        //putting user input in a character array;
        char[] userLetters = compare.toCharArray();

        //object creation
        File openFile = new File(file);
        Scanner inFile = new Scanner(openFile);

        //for loop that will read data from the Morse.txt file
        for(int i = 0; i < MAX; i++)
        {
            while(inFile.hasNext())
            {
                line = inFile.next();
                code = (char)line.charAt(0);
                morseLetter[i] = code;
                morseCode[i] = inFile.next();
            }//end nested while loop
        }//end for loop

        for(int j = 0; j < length; j++)
        {
            for(int k = 0; k < MAX; k++)
            {
                if(userLetters[j] == morseLetter[k])
                {
                    newMessage[j] = morseCode[k];
                }
            }//end nested for loop
        }//end for loop
        return newMessage;
    }//end method that completes translateion

    public String toString(String a, String[] b)
    {
        String input = a;
        String[] coded = b;
        String[] encoded = new String[input.length()];
        //JOptionPane.showMessageDialog(null, "Original Text: " + input + "\nCoded Text: " + coded);    
        for(int l = 0; l <input.length(); l++)
        {
            encoded[l] = coded[l];
        }   
        String str = "";
        System.out.print(Arrays.toString(encoded));
        return str;
    }//end toString method
}//end Translate Class

The Morse code text file contains the following:

1 .----

2 ..---

3 ...--

4 ....-

5 .....

6 -....

7 --...

8 ---..

9 ----.

0 -----

A .-

B -...

C -.-.

D -..

E .

F ..-.

G --.

H ....

I ..

J .---

K -.-

L .-..

M --

N -.

O ---

P .--.

Q --.-

R .-.

S ...

T -

U ..-

V ...-

W .--

X -..-

Y -.--

Z --..


Your Translate.toString method will always return an empty string because that's the only thing you assign to the str variable.


public String toString(String a, String[] b)
{
   System.out.println("Input: " + a);
   System.out.println("Output:");

   String output = "";
   for(int i = 0; i < b.length; i++)
   {
      output = output + b[i];
   }

   return output;

 }//end toString method

But the real problem is this loop:

for(int i = 0; i < MAX; i++)
        {
            while(inFile.hasNext())
            {
                line = inFile.next();
                code = (char)line.charAt(0);
                //System.out.println(code);
                morseLetter[i] = code;
                morseCode[i] = inFile.next();
            }//end nested while loop
        }//end for loop

There you try parsing the morse code letters into a file, but the problem is the for loop is in the first iteration and then, the whole while loop is executed, therefore you're always placing the morsecode in the first position of the array.

So it should look like that:

int  counter = 0;
        while(inFile.hasNext())
            {
                line = inFile.next();
                code = (char)line.charAt(0);
                //System.out.println(code);
                morseLetter[counter] = code;
                morseCode[counter] = inFile.next();
                counter++;
            }//end nested while loop

As an additional note: Did you noticed that if the user clicks cancel in your OptionsDialog that there is a NullPointer? Proper exception handling is part of the assignment I think ;)

Therefore I would write the loop like this:

do
        {
            userInput = JOptionPane.showInputDialog("Please enter what you wish to translte to Morse code (no punctuation).");
            if (userInput != null && !userInput.equals("")) {
                String compare = userInput.toUpperCase();
                String[] codedText = new String[compare.length()];

                codedText = text.translateHere(compare);
                text.toString(userInput, codedText);
            }
        }while(userInput != null && !userInput.equals(SENTINEL));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜