摩尔斯电码使用静态

时间:2013-04-06 16:25:12

标签: java morse-code

我有这个程序,但我有一些问题: 这是我进行计算的地方。

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class MorseCode {
 public MorseCode()
    {
    }//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 = "C:\\APCS  Course B\\Unit 4\\Unit 4 Documents\\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);
        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
        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)
{
   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
}//end Translate Class

主要方法:

import javax.swing.JOptionPane;
import java.io.*;
import java.util.Scanner;
public class MorseCodeTester
{
    public static void main(String[] args)throws IOException
    {
        String userInput;
        final String SENTINEL = "0";//for exiting program when entered
        //object creation
        MorseCode text = new MorseCode();
        //getting user input to be translated
        do
        {
            Scanner in = new Scanner(System.in);
            System.out.print("Please enter what you wish to translte to Morse code (no punctuation): ");
            userInput = in.nextLine();
            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

所以我的程序就是当我输入一个输入时,输出显示黑色,甚至在主要方法中我做了计算,将其转换为摩尔斯电码。如果我可以在我的任何方法中使用静态标识符,也有任何建议。

这是文本文件:

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 --..

1 个答案:

答案 0 :(得分:2)

您的代码应该使用哈希映射来逐字键入莫尔斯代码,这使您的代码更加简单。 获取字母的morsecode就是一个简单的查找。

你也可以只加载一次数据,也许是在MorseCode的构造函数中。

但是要解决你的问题,你只是不打印输出。只是返回它而不是在控制台上显示它。

如果你将toString方法更改为这样,它应该打印出来。

public String toString(String a, String[] b) {
    System.out.println("Input: " + a);
    System.out.print("Output:"); // changed to a print, to avoid newline
    String output = "";
    for (int i = 0; i < b.length; i++) {
        output = output + b[i];
    }
    System.out.println(output); // this was missing
    return output;
}//end toString method