在这个问题之前,我先要说明一个事实,那就是我学习编程才一个月,而这个学校的作业却把我难住了。具体地说,它是摩尔斯电码到英语翻译器(反之亦然)...这是我被困住的部分:
/*
* A program that asks the user to select which they would like to do: translate
* from English to Morse code, or Morse code to English. The list of characters
* for each language is stored using arrays. The program will then perform and return
* the translations.
*/
import java.util.Scanner;
public class MorseEnglishTranslator
{
public static void main( String [] args )
{
int translateChoice = 0; // Variable for person's choice for direction of translation
Scanner inputText = new Scanner( System.in ); // Create a Scanner to obtain user input
System.out.print( "Enter 1 to translate from English to Morse code, 2 for Morse code to English: " );
translateChoice = inputText.nextInt();
if (translateChoice == 1);
{
System.out.print("Enter a letter, word, or phrase you would like translated: ");
}
if (translateChoice == 2);
{
System.out.print("Enter the Morse code you would like translated, separate letters and words with a |: ");
}
String userStr = inputText.nextLine();
translator( translateChoice, userStr);
} // Closes main
public static void translator( int translateChoice, String userStr) // Method for translating either direction
{
String english [] = {"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 s1 = String.join(" ", english); // Assigns the contents of english array to one string
String morse [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..",
"----.", "-----", "|"};
String s2 = String.join("|", morse); // Assigns the contents of morse array to one searchable string
if (translateChoice == 1);
{
String userStrLower = userStr.toLowerCase(); // In case user capitalized anything, changes everything to lowercase
for (int allFound=0; allFound <userStrLower.length(); allFound ++)
{
allFound = s1.indexOf( userStrLower ); // Variable 'allFound' to receive the search of s1 using userStrLower
System.out.print( allFound );
}
}
if (translateChoice == 2);
{
for (int allFound=0; allFound <userStr.length(); allFound ++)
{
allFound = s2.indexOf( userStr ); // Variable 'allFound' to receive the search of s2 using userStr
System.out.print( allFound );
}
}
} // Closes translator
} // Closes class
我知道您正在学习Java类的介绍,所以可以随意提问,但您1)不需要连接字符串,2)indexof
对于您需要的目的来说效率确实很低。hashmap
是翻译器的完美对象。
我制作了这个可以在两个字符串数组之间来回的双向映射类。将其保存到bimap.java
文件中。
import java.util.HashMap;
public class BiMap {
private HashMap<String, String> forwardMap;
private HashMap<String, String> backwardMap;
public BiMap(String[] from, String[] to) {
forwardMap = new HashMap<>();
backwardMap = new HashMap<>();
for (int i = 0; i < from.length && i < to.length; i++) {
forwardMap.put(from[i], to[i]);
backwardMap.put(to[i], from[i]);
}
}
public String translateForward(String key) {
return forwardMap.get(key);
}
public String translateBackward(String key) {
return backwardMap.get(key);
}
}
下面是该类的示例用法。请随意添加您的用户提示返回到它。建议对类变量常量使用static final
修饰符。然后,我定义了一些private
方法来提取翻译逻辑。
学习时尽可能多地编写可读和可重用的方法是很好的做法。
public class MorseEnglishTranslator {
private static final String[] ENGLISH = new String[]{
"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", " "};
private static final String[] MORSE = new String[]{
".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.", "...", "-", "..-",
"...-", ".--", "-..-", "-.--", "--..", ".----",
"..---", "...--", "....-", ".....", "-....",
"--...", "---..", "----.", "-----", "|"};
private static final BiMap MORSE_MAP = new BiMap(ENGLISH, MORSE);
private static final String DELIMITER = " ";
private static String toMorse(String s) {
StringBuilder sb = new StringBuilder();
String lower = s.toLowerCase();
for (int i = 0; i < lower.length(); i++) {
String c = String.valueOf(lower.charAt(i));
sb.append(MORSE_MAP.translateForward(c)).append(DELIMITER);
}
return sb.toString();
}
private static String fromMorse(String s) {
String[] split = s.split(DELIMITER);
StringBuilder sb = new StringBuilder();
for (String morse : split) {
sb.append(MORSE_MAP.translateBackward(morse));
}
return sb.toString();
}
public static void main(String[] args) {
String sentence = "Hello World";
String morse = toMorse(sentence);
String translated = fromMorse(morse);
System.out.println(sentence);
System.out.println(morse);
System.out.println(translated);
System.out.println(sentence.equalsIgnoreCase(translated));
}
}
示例运行
Hello World
.... . .-.. .-.. --- | .-- --- .-. .-.. -..
hello world
true
问题内容: 我在PostgreSQL中有一个表,其中包含: 是类型,它包含具有正确顺序的该行的父记录列表。 家长:然后再 如何编写一个查询,该查询对于任何给定的ID都会生成其父母姓名的字符串? 例如: :。 :。 :。 编辑: 如果可能的话,我希望请求的ID总是会出现。 :。 :。 :。 :。 问题答案: 您可以结合使用诸如generate_subscripts和array之类的多项操作来获得结果
问题内容: 我如何提取字符串[]或arraylist中的所有元素,并以适当的格式(所有空格之间使用单个空格)组合所有单词并存储在数组中。 输出:Java很酷。 问题答案: 使用。 或使用Apache Commons Lang 。 或使用Java8的。
问题内容: 我有一个字符串形式: 依此类推(长度会有所不同)。由此创建字典的最简单方法是什么? 我知道我可以拆分,但是我无法获得正确的语法。如果我分开,那么我如何将这两个部分结合在一起? 对此进行迭代似乎很痛苦。 问题答案: 编辑:下一个解决方案是当您想要将值作为整数,我认为这是您想要的。
问题内容: 这是一个非常基本的问题。但是我无法在Java文档中找到答案,也无法对其进行测试,因为我不知道这种方法是否存在。 我可能会收到一个URL字符串,可能是 要么 然后我会得到可能以开头的资源路径,或者就像 我正在看课,可以处理第一部分,即获取hostURL使其成为HTTPS或HTTP请求。问题是附加资源路径。我必须手动检查它的第一个字母是否存在。我想知道此功能是否已经在某个类中。 问题答案:
我是初学C#的,我想为学校创建一个计算器,但是在第45行出现了一个错误。错误消息:字符串长度必须正好为一个字符。我认为在拆分String数组然后另存为char数组之后会有一个错误。但我不知道为什么,也许是假的。 代码部分: 错误消息由char[]发送。 我想我有一个从字符串[]分裂的翻译错误
我读过很多关于创建字符串时内存分配的相互矛盾的文章。一些文章说new operator在堆中创建一个字符串,String literal在String Pool[heap]中创建,而一些文章说new operator在堆中创建一个对象,在String Pool中创建另一个对象。 为了分析这一点,我写了下面的程序,打印字符串字符数组和字符串对象的hashcode: 此程序打印以下输出: 从这个输出中