首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Morse Code Converter Code返回无效输出

Morse Code Converter Code返回无效输出
EN

Stack Overflow用户
提问于 2019-11-12 10:14:23
回答 1查看 66关注 0票数 1

我应该做一个摩尔斯电码转换器,我已经尝试了一切试图让它工作,但它就是不起作用

它不停地给我

r . ___ ___ ___ ___

不管我把什么放进去。这是我的全部代码。我知道我可以通过switch或者main来做,但是我的老师不允许。我之所以使用intArray = [100],是因为它总是给我出界错误。

代码语言:javascript
运行
复制
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());
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-11-12 13:00:11

有太多不必要的代码行了!让我们一步一步地走过去。

你不需要而不是需要这些类变量

代码语言:javascript
运行
复制
public final int NUM_CHARS = 40;
private String original;
private String mcode;
int[] intArray = new int[100];

构造函数也是而不是所必需的-

代码语言:javascript
运行
复制
public MorseCodeConverter(){
}

public MorseCodeConverter(String input){
    this.original=input;
}

像这样重构你的toMorse(char c)方法-

代码语言:javascript
运行
复制
public String toMorse(char c) {
    for (int i = 0; i < character.length; i++) {

        if (c == character[i]) {
            return code[i];
        }
    }

    return "";
}

像这样重构你的getMorseCode()方法-

代码语言:javascript
运行
复制
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类-

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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)方法

代码语言:javascript
运行
复制
morseCodeBuilder.append(toMorse(input.charAt(i)));

对这个-

代码语言:javascript
运行
复制
morseCodeBuilder.append(CHAR_TO_MORSE_CODE_MAP.get(input.charAt(i)));

现在,您不需要toMorse(char c)方法。就这样!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58811045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档