我有这个程序,但我有一些问题: 这是我进行计算的地方。
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 --..
答案 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