Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我已经在此发布了一个主题,但是已经做了相当大的修改(该主题被搁置了。所以我无法编辑)更改了我的代码(我尝试了其中一个用户所说的不同变体,但没有bean)。我试过只运行toMorse,但是尽管它可以编译,但没有输出,并且显示错误消息
这是我的修改代码:
您将使用简单的名称来调用它
我认为或多或少都是。
修复英文的建议:
对于
如果找到它,则找到它的位置(索引),它也是您在
或者,更确切地说,您可以使用与
您可以使用类似
麻烦的符号
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我已经在此发布了一个主题,但是已经做了相当大的修改(该主题被搁置了。所以我无法编辑)更改了我的代码(我尝试了其中一个用户所说的不同变体,但没有bean)。我试过只运行toMorse,但是尽管它可以编译,但没有输出,并且显示错误消息
'java.lang.ArrayIndexOutOfBoundsException(at projmorsejava:22 and 46)'
,我不确定如何配置toEnglish,这时我已经尝试使用replaceAll,indexOf和valueOf方法。我也尝试过使用plaintextString,但是也没有解决(我可能实现不正确)。这是我的修改代码:
import java.util.Scanner;
public class ProjMorse
{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] alpha = { "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[] dottie = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..", ".----", "..---", "...--", "....-", ".....",
"-....", "--...", "---..", "----.", "-----", "|" };
System.out
.println("Enter English to convert from English or Morse to convert from Morse:");
String ans = input.nextLine();
if (ans.equals("English")) {
System.out.println("Please enter the text you would like to convert to Morse Code: ");
String english = input.nextLine();
char[] translates = (english.toLowerCase()).toCharArray();
System.out.println(toMorse(translates, dottie)); //calls on method toMorse
}
else if (ans.equals("Morse")) {
System.out
.println("Please enter the text you would like to convert to English (separate words with '|'):");
String code = input.nextLine();
String[] translates = (code.split("[|]", 0));
System.out.println(toEnglish(translates, alpha));//calls on method toEnglish
}
else
System.out.println("Invalid input, please try again.");
}
public static String toMorse(char [] translates, String [] dottie)
{
String morse = "";
for (int j = 0; j < translates.length; j++)
{
char a = translates[j];
if(Character.isLetter(a))
{
morse = dottie[a + 'a'];
}
}
return morse;/*so I tried running only this(commented other stuff out) and it compiled but although it ran it didnt translate */
}
public static String toEnglish(String [] translates, String [] alpha)
{
String s;
for (int n = 0; n < translates.length; n++)
{
String a = translates[n];
s = java.util.Arrays.asList(alpha).(Character.toChars(a + 'a')[0]);//I'm not sure what to do here..
}
return s;
}
}
最佳答案
有些事情不起作用:
缺少初始public class ...
(我怀疑有复制粘贴错误)
由于您使用扫描仪,缺少import java.util.Scanner;
对toMorse
的错误调用:首先,需要两个参数(检查方法签名);然后,第一个参数的名称不是morse
(未知符号),必须是您刚刚“创建”的translates
!关于第二个:您需要用字符串数组代替例如莫尔斯电码为“ e”,因此第二个参数必须为... dottie
对toEnglish
的错误调用:需要两个参数(如前所述检查方法签名!);第一个必须再次为translates
(未知的s
,之前为morse
)!关于第二个参数:参见上文,但是当然由于输入中有莫尔斯,因此需要另一个数组。
在toMorse
中,您使用translates[j]
而不是valueOf
选择每个字符。
同样,在toEnglish
中,您可以使用translates[n]
获得字符串
在toEnglish
和toMorse
中,您必须将转换后的字符串“累加”为字符串,并在末尾(即循环外)返回它!
拥有一个字符串,您可以使用.charAt(0)
在pos 0处选择一个字符:执行x - 'a'
之类的操作x不能为字符串,因此,由于您有一个字符串,因此必须获取其第一个字符。
注意:关于morse
和s
的使用:方法中的变量名与调用方中的变量名无关!toMorse
的示例:
String morse = "";
for (int j = 0; j < translates.length; j++)
{
char a = translates[j];
if(Character.isLetter(a))
{
morse += dottie[a - 'a'];
}
}
return morse; // this symbol is unknown to the caller
您将使用简单的名称来调用它
System.out.println(toMorse(translates, dottie));
toEnglish
的修复非常相似(尽管原始代码无法正常工作),我希望您可以自己完成。我认为或多或少都是。
修复英文的建议:
对于
translates
数组中的每个字符串,必须搜索dottie
字符串数组才能搜索点和线的特定序列。如果找到它,则找到它的位置(索引),它也是您在
alpha
数组中保留的正确字母的索引。因此,您可能需要将该数组添加为参数,并使用索引来选择字母。或者,更确切地说,您可以使用与
toMorse
相同的“技巧”,并保持toEnglish
方法签名不变:一旦有了索引(因为找到了索引),就可以“反转”编码算法,因此您必须在该索引(整数)上添加'a'
以获得字母的代码。您可以使用类似
Character.toChars(k + 'a')[0]
的方式将要添加的字符作为“ k
”作为“累加字符串”。麻烦的符号
Character.toChars(k + 'a')[0]
因为确实Character.toChars
返回一个数组,所以我们选择该数组的第一个元素,即我们需要的char。10-06 10:19