-1

我不确定如何将我的字符串按 5 计数,然后将莫尔斯电码转换为数字。我使用 for 循环并使用带有似乎不起作用的子字符串 bt 的 if 语句进行炒作。

import acm.program.*;

public class MorseDecoder extends ConsoleProgram
{

public void run()
{
    int digit = 0;
    String question = readLine("Please enter the morse code: ");
    String morse = question.substring(30);

    for (int i = 0; i == question.length(); i += 5)
    {
        if (morse.equals(".----")) {
            digit = 1;
        }
        else if (morse.equals("..---")) {
            digit = 2;
            System.out.println(digit);
        }
        else if (morse.equals("...--")) {
            digit = 3;
            System.out.println(digit);
        }
        else if (morse.equals("....-")) {
            digit = 4;
            System.out.println(digit);
        }
        else if (morse.equals(".....")) {
            digit = 5;
            System.out.println(digit);
        }
        else if (morse.equals("-....")) {
            digit = 6;
            System.out.println(digit);
        }
        else if (morse.equals("--...")) {
            digit = 7;
            System.out.println(digit);
        }    
        else if (morse.equals("---..")) {
            digit = 8;
            System.out.println(digit);
        }
        else if (morse.equals("----.")) {
            digit = 9;
            System.out.println(digit);
        }
        else if (morse.equals("-----")) {
            digit = 0;
            System.out.println(digit);
        }
        else {
            System.out.println("NaN");
        }
    }
}

//~ Methods ...............................................................

}    

以下是我的 For 循环的编辑:

for (int i = 0; i == question.length(); i += 5)
    {
        String morse = question.substring(i, i + 5);

        if (morse.equals(".----")) {
            digit = 1;
            System.out.println(digit);
        }
        else if (morse.equals("..---")) {
            digit = 2;
            System.out.println(digit);
        }
        else if (morse.equals("...--")) {
            digit = 3;
            System.out.println(digit);
        }
        else if (morse.equals("....-")) {
            digit = 4;
            System.out.println(digit);
        }
        else if (morse.equals(".....")) {
            digit = 5;
            System.out.println(digit);
        }
        else if (morse.equals("-....")) {
            digit = 6;
            System.out.println(digit);
        }
        else if (morse.equals("--...")) {
            digit = 7;
            System.out.println(digit);
        }    
        else if (morse.equals("---..")) {
            digit = 8;
            System.out.println(digit);
        }
        else if (morse.equals("----.")) {
            digit = 9;
            System.out.println(digit);
        }
        else if (morse.equals("-----")) {
            digit = 0;
            System.out.println(digit);
        }
        else if (morse.length() < 5) {
            System.out.println("NaN");
        }
    }

编辑:我已经更新了我的代码。

4

3 回答 3

3

您永远不会设置morseDig为“”以外的任何内容。我看不到这个程序将如何工作,甚至一次。

实际上,您的代码存在很多问题,Steve P. 在他删除的有用答案中指出了其中一个问题。

于 2013-11-03T02:01:01.387 回答
2

除了提示之外,您打印的唯一时间是:

else if (morseDig.equals("..---")) 
{
     digit = 2;
     System.out.println(digit);
}

并在:

else 
{ 
     System.out.println("NaN");
}

这不是唯一的问题(参见@Hovercraft Full of Eels 的回答)。

于 2013-11-03T02:01:13.013 回答
0

我同意您似乎没有将 morseDig 设置为除“”之外的任何内容。

您可以使用 substring 来获取您正在寻找的五个字符,例如: morseDig = question.substring(i, i+5);

您可能想要构建一个字符串以从莫尔斯电码输出您的号码,例如: String out =""; 然后在每个 if 或 elseif 语句中,只需将输出添加到字符串中:out = out + 1; 等等

在你的循环之后,只需将变量打印到屏幕上。我希望这对您的一些问题有所帮助。

于 2013-11-03T02:26:34.980 回答