将英语转换成摩尔斯电码
Convert English into MorseCode
这个java代码是将英文转换成摩尔斯电码。
当用户输入标记字符 $ 时,该程序将终止。在输入每个字符串之后,程序会显示其对应的摩尔斯电码,在字符之间留一个空白 space (ø),在单词之间留两个 øø。
EG。你好世界。输出应为 ....ø.ø.-..ø.-..ø---ø.--ø---ø.-.ø.-..ø-..
我的代码有一些问题。 1.I 用户输入 ø 时不知道应该把 $ 放在哪里来终止程序; 2.The 输出正确但总是以 (ø) 结尾,因为 System.out.print(code[variable] + "ø");
这是我的代码:
public class Morse{
public static void main (String [] args)
{
Scanner englishtomorse = new Scanner(System.in);
System.out.println ("Please enter an original sentence in English.");
english = englishtomorse.nextLine();
String str = englishtoMorse(english);
System.out.println(str);
}
public static String englishtoMorse(String english)
{
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String code[] = {"._", "_...", "_._.", "_..",".",".._.","__.", "....",
"..", ".___", "_._", "._..", "__","_ .", "___", ".__.", "__._", "._.",
"...", "_", ".._", "..._", ".__", "_.._", "_.__", "__.."};
english = english.toUpperCase();
for(int xyz = 0; xyz < english.length(); xyz++)
{
char letter = english.charAt(xyz);
if (letter == ' ')
{
System.out.print ("ø");
continue;
}
for(int variable = 0; variable < alphabet.length(); variable++)
{
if(alphabet.charAt(variable) == letter)
{
System.out.print(code[variable] + "ø");
break;
}
}
}
return " ";
}
您的代码存在一些您应该注意的问题。
看看Sun/Oracle's naming convention。它使代码更容易阅读。驼峰式是必须的。
Scanner
被视为 Java 上的资源。所以如果你打开它,你必须关闭它。否则,您可能会遇到资源泄漏问题。关闭资源只是一个简单的方法调用,但它不应该被忽略。
例如:
resourceVariableName.close().
- 第三行英文的变量声明在哪里?
english = englishtomorse.nextLine();
第一个问题:
Scanner
将继续读取,直到找到 Java SE API
中所述的文件结束条件
通常的做法是使用Scanner
在循环内处理数据并在满足文件结束条件或找到"special"退出词时停止下一个操作。
因此您可以重构代码以考虑以下情况:
扫描仪发现不止一行
用户没有输入您保留的退出词($)
例如:
Scanner myScanner = new Scanner(System.in);
while(myScanner.hasNext() && !myScanner.equals("$")) {
System.out.println(this.englishToMorse(myScanner.nextLine()));
}
myScanner.close();
第二个问题,你应该检查你的方法逻辑。你声明你 return 一个 String 但它总是
returns " ";
为什么在任何情况下都应该 return 空字符串?方法签名很重要,因为您可以预测该方法能够做什么以及必须做什么 return。
想一想,如果你把这个 class 提供给一个朋友,他调用了你的方法,他怎么能预测你不会 return 你上面写的莫尔斯电码方法签名 return 类型?
顺便说一下,你可以用更好的方法解决这个问题,而不用循环两个数组。看看Map data structure。这是对您的整体解决方案的巨大改进。
这个java代码是将英文转换成摩尔斯电码。
当用户输入标记字符 $ 时,该程序将终止。在输入每个字符串之后,程序会显示其对应的摩尔斯电码,在字符之间留一个空白 space (ø),在单词之间留两个 øø。
EG。你好世界。输出应为 ....ø.ø.-..ø.-..ø---ø.--ø---ø.-.ø.-..ø-..
我的代码有一些问题。 1.I 用户输入 ø 时不知道应该把 $ 放在哪里来终止程序; 2.The 输出正确但总是以 (ø) 结尾,因为 System.out.print(code[variable] + "ø");
这是我的代码:
public class Morse{
public static void main (String [] args)
{
Scanner englishtomorse = new Scanner(System.in);
System.out.println ("Please enter an original sentence in English.");
english = englishtomorse.nextLine();
String str = englishtoMorse(english);
System.out.println(str);
}
public static String englishtoMorse(String english)
{
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String code[] = {"._", "_...", "_._.", "_..",".",".._.","__.", "....",
"..", ".___", "_._", "._..", "__","_ .", "___", ".__.", "__._", "._.",
"...", "_", ".._", "..._", ".__", "_.._", "_.__", "__.."};
english = english.toUpperCase();
for(int xyz = 0; xyz < english.length(); xyz++)
{
char letter = english.charAt(xyz);
if (letter == ' ')
{
System.out.print ("ø");
continue;
}
for(int variable = 0; variable < alphabet.length(); variable++)
{
if(alphabet.charAt(variable) == letter)
{
System.out.print(code[variable] + "ø");
break;
}
}
}
return " ";
}
您的代码存在一些您应该注意的问题。
看看Sun/Oracle's naming convention。它使代码更容易阅读。驼峰式是必须的。
Scanner
被视为 Java 上的资源。所以如果你打开它,你必须关闭它。否则,您可能会遇到资源泄漏问题。关闭资源只是一个简单的方法调用,但它不应该被忽略。
例如:
resourceVariableName.close().
- 第三行英文的变量声明在哪里?
english = englishtomorse.nextLine();
第一个问题:
Scanner
将继续读取,直到找到 Java SE API
通常的做法是使用Scanner
在循环内处理数据并在满足文件结束条件或找到"special"退出词时停止下一个操作。
因此您可以重构代码以考虑以下情况:
扫描仪发现不止一行
用户没有输入您保留的退出词($)
例如:
Scanner myScanner = new Scanner(System.in);
while(myScanner.hasNext() && !myScanner.equals("$")) {
System.out.println(this.englishToMorse(myScanner.nextLine()));
}
myScanner.close();
第二个问题,你应该检查你的方法逻辑。你声明你 return 一个 String 但它总是
returns " ";
为什么在任何情况下都应该 return 空字符串?方法签名很重要,因为您可以预测该方法能够做什么以及必须做什么 return。
想一想,如果你把这个 class 提供给一个朋友,他调用了你的方法,他怎么能预测你不会 return 你上面写的莫尔斯电码方法签名 return 类型?
顺便说一下,你可以用更好的方法解决这个问题,而不用循环两个数组。看看Map data structure。这是对您的整体解决方案的巨大改进。