我应该做一个摩尔斯电码转换器,我已经尝试了一切试图让它工作,但它就是不起作用
它不停地给我
r . ___ ___ ___ ___
不管我把什么放进去。这是我的全部代码。我知道我可以通过switch或者main来做,但是我的老师不允许。我之所以使用intArray = [100]
,是因为它总是给我出界错误。
public class MorseCodeConverter
{
public final int NUM_CHARS = 40;
private String original;
private String mcode;
int[] intArray = new int[100];
char[] character = { ' ', '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', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
String[] code = { " ", ". ___", "___ . . .", "___ . ___ .", "___ . .", ".", ". . ___ .", "___ ___ .", ". . . .", ". .", ". ___ ___ ___", "___ . ___", ". ___ . .", "___ ___", "___ .", "___ ___ ___", ". ___ ___ .", "___ ___ . ___", ". ___ .", ". . .", "_", ". . ___", ". . . ___", ". ___ ___", "___ . . ___", "___ . ___ ___", "___ ___ . .", ". ___ ___ ___ ___", ". . ___ ___ ___", ". . . ___ ___", ". . . . ___", ". . . . .", "___ . . . .", "___ ___ . . .", "___ ___ ___ . .", "___ ___ ___ ___ .", "___ ___ ___ ___ ___"};
/**
* Constructor for objects of class MorseCodeConverter
*/
public MorseCodeConverter() { }
public MorseCodeConverter(String input)
{
this.original=input;
}
public String toMorse(char ch)
{
String char1 = ("1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W XY Z");
for (int index = 0; index <char1.length(); index++){
for ( int i = 0; i < character.length; i ++) {
if (char1.charAt(index) == character[i]) {
intArray[index] = i;
break;
}
}
}
return " ";
}
public String getMorseCode() {
StringBuilder stringBuilder=new StringBuilder();
for (int i=0; i <intArray.length; i++) {
int x = intArray[i];
stringBuilder.append(code[x]);
break;
}
return stringBuilder.toString();
}
}
public class MorseCodeConverterDemo
{
public static void main(String [] args)
{
//Scanner keyboard = new Scanner(System.in);
//char userInput=keyboard.;
MorseCodeConverter mcc = new MorseCodeConverter();
Scanner sc = new Scanner(System.in);
// Character input
char c = sc.next().charAt(0);
mcc.toMorse(c);
mcc.getMorseCode();
System.out.println(mcc.getMorseCode());
}
}
发布于 2019-11-12 13:00:11
有太多不必要的代码行了!让我们一步一步地走过去。
你不需要而不是需要这些类变量
public final int NUM_CHARS = 40;
private String original;
private String mcode;
int[] intArray = new int[100];
构造函数也是而不是所必需的-
public MorseCodeConverter(){
}
public MorseCodeConverter(String input){
this.original=input;
}
像这样重构你的toMorse(char c)
方法-
public String toMorse(char c) {
for (int i = 0; i < character.length; i++) {
if (c == character[i]) {
return code[i];
}
}
return "";
}
像这样重构你的getMorseCode()
方法-
public String getMorseCode(String input) {
StringBuilder morseCodeBuilder = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
morseCodeBuilder.append(toMorse(input.charAt(i)));
}
return morseCodeBuilder.toString();
}
现在,对于您的main()
方法,可以像这样使用MorseCodeConvert
类-
MorseCodeConverter mcc = new MorseCodeConverter();
Scanner sc = new Scanner(System.in);
// Character input
String c = sc.next();
System.out.println(mcc.getMorseCode(c));
改进建议
您可以定义一个array
,而不是定义两个Map
。这将消除一个额外的循环。
首先,定义map
private static final Map<Character, String> CHAR_TO_MORSE_CODE_MAP = new HashMap<>();
static {
CHAR_TO_MORSE_CODE_MAP.put(' ', " ");
CHAR_TO_MORSE_CODE_MAP.put('A', ". ___");
CHAR_TO_MORSE_CODE_MAP.put('B', "___ . . .");
CHAR_TO_MORSE_CODE_MAP.put('C', "___ . ___ .");
//so on...
}
更改此行getMorseCode(String input)
方法
morseCodeBuilder.append(toMorse(input.charAt(i)));
对这个-
morseCodeBuilder.append(CHAR_TO_MORSE_CODE_MAP.get(input.charAt(i)));
现在,您不需要toMorse(char c)
方法。就这样!
https://stackoverflow.com/questions/58811045
复制相似问题