我尝试使用以下参数编写translate方法。但是,每次运行该方法时,它都会跳过第一个if语句,然后右转到第二个for循环。
/ ** 根据wordList中的数据翻译单词然后匹配大小写。 参数wordList包含翻译的映射。数据是 组织在一个ArrayList中,包含长度为2的String数组。第一个 cell(索引0)包含原始语言中的单词,称为key, 第二个单元格(索引1)包含翻译。 假设wordList中的项目按升序排序 根据第一个单元格中的键。 @param字样 要翻译的词。 @param wordList 包含转换映射的ArrayList。 @return wordList中的映射与原始映射相同。如果不 匹配在wordList中找到,它返回一个与word相同长度的Config.LINE_CHAR字符串。 * /
public static String translate(String word, ArrayList<String[]> wordList) {
String newWord = "";
int i = 0;
for (i = 0; i < wordList.size(); i++) {
word = matchCase(wordList.get(i)[0], word); //make cases match
if (word.equals(wordList.get(i)[0])) { //check each index at 0
newWord = wordList.get(i)[1]; //update newWord to skip second for loop
return wordList.get(i)[1];
}
}
if (newWord == "") {
for (i = 0; i < word.length(); i++) {
newWord += Config.LINE_CHAR;
}
}
return newWord;
}
对于我正在运行的文件,每个单词都应该有一个翻译的单词,因此不应打印Config.LINE_CHAR。但这是打印的唯一东西。我该如何解决这个问题。
答案 0 :(得分:1)
您正在将newWord
初始化为值""
。 newWord
可能发生变化的唯一时间是在第一个循环中,它会立即跟随return
语句,退出您的方法。可以达到if语句的唯一方法是,如果您在第一个循环期间没有返回,那么如果它到达if语句,那么newWord
必须保持不变,因为它的初始赋值为""
一些不相关的建议:在比较字符串时应使用equals
运算符。例如,if ("".equals(newWord))
。否则,您将比较两个String对象的内存地址而不是它们的值。
您可能需要共享matchCase
方法以确保解决所有错误。