我正在尝试构建一个简单的字典,该字典将字符串与ArrayList
上的单词进行比较,然后从列表中返回不同的值。ArrayList
用外来词布置,然后是英语等效词,所以这个想法是我输入一个单词,使用扫描仪将其与数组列表进行比较,然后返回索引值 +1,所以如果我键入的单词在列表中排名第 7,我希望它返回第 8 个单词并将其打印出来。
我已经有了输入字符串并进行比较的基本想法,但我不知道如何从ArrayList
返回以下单词:
public void translateWords(){
String nameSearch;
nameSearch=input.nextLine();
for (Phrase c:phrases) {
if (c.getName().equals(nameSearch)) {
System.out.println( c.advancedToString());
return;
}
}
System.out.println("not on list");
我已经尝试使用 ArrayList 的 get 方法,但我不确定如何使用它,因此在这里非常感谢任何反馈。
for-each
不合适,因为您无法访问连续的元素,在您的情况下翻译单词。所以我建议你使用Iterate
我想phrases
属于List<Phrase>
型
public void translateWords(){
String nameSearch;
nameSearch=input.nextLine();
Iterator<Phrase> it = phrases.iterator();
while(it.hasNext())
{
Phrase c = it.next();
if (c.getName().equals(nameSearch)) {
System.out.println( it.next().advancedToString());
return;
}
}
System.out.println("not on list");
}
的事情会为你做这项工作吗?没有测试,只是从我的脑海中:
public void translateWords(){
String nameSearch;
nameSearch=input.nextLine();
if(c.indexof(nameSearch)){
System.out.println(c.get(c.indexof(c.indexof(nameSearch)+1));
} else {
System.out.println("not on list");
}
}
另一种方法是使用字典,例如Java HashMap。在不知道 Phrase
类是如何实现的情况下,这可能如下所示:
// create dictionary
Map<Phrase, Phrase> d = new HashMap<Phrase, Phrase>();
// add phrases
d.put(new Phrase("Guten Tag", "de"), new Phrase("Good morning", "en"));
// get translation
Phrase p = d.get(new Phrase(nameSearch, "de"));
(要使这项工作,必须实施Phrase.equals
和Phrase.hashCode
。
这似乎是您的任务的更好数据结构选择。使用 HashMap,项目的查找时间为 O(1),而不是您的方法中的 O(n),如果您的字典包含数千或数百万个短语,或者您必须经常这样做,这可能是相关的。一个可能的缺点是条目必须非常相等,例如,您无法(轻松)检查"相似"的短语或单词。