-1

因此,在四处寻找我的问题的答案时,我只能找到地图结构或只是比较字符串并且必须编码才能停止。我需要能够基本上在语言之间进行翻译并打印出翻译,并让用户能够再次要求翻译另一个单词。我有 2 串 10 个匹配的单词,从英语到俄语。我需要能够使用目标(或键)来查找翻译。我还需要使用顺序搜索。

   import java.util.*;
  public class CISCLabTwo
 {
  public static void main (String [] args)
  {
     Scanner keyBoard = new Scanner (System.in);

     String [] english = {"House", "Fat", "Monkey", "Trip", "Jumbo", "Chicken", "Unicorn", "Radio", "Shack", "Xylophone"};
     String [] russian = {"Dom", "Zhir", "Obeziana", "Poezdka", "Ogromniy", "Kuricha", "Edinorog", "Raadiioo", "Hizhina", "Ksilofon"};
     System.out.println ("House, Fat, Monkey, Trip, Jumbo, Chicken, Unicorn, Radio, Shack, Xylophone");
     System.out.println("Enter a Word From Above to Translate to Russian: ");

     int i = 0;

     for (i = 0; i < english.length; i++)
        if (english[i]=target){
           return i;
        }
        else{
           return - 1;
        }
  }//end class
    public static int translate (String [] english, String target)


        }//end main
4

4 回答 4

2

http://en.wikipedia.org/wiki/Sequential_search

基本上,您创建一个 for 循环检查英语数组中的匹配项。当您有匹配时,该函数将返回字符串在给定数组中的位置。使用这个位置可以获得相应的俄语翻译。

public static int translate(String [] english, String target)
{
    for(int i = 0; i < english.length; i++){
        if(english[i].equals(target)){
            // Found on position i
            return i;
        }
    }
    return -1;
}

您可能想要重命名该函数,因为它并没有真正翻译,并且只返回一个整数而不是字符串。

于 2013-10-14T21:48:57.203 回答
1

首先,以这种方式单独处理两个数组是令人困惑的。您可能想在同一个文件中创建一个额外的类:

class Word {
    String english;
    String russian;
}

然后您可以创建以下数组:

Word[] words = new Word[10];

这样,您可以使用单独的方法进行翻译,如下所示:

String translate(String eng) {
    for (Word w : words) if (eng.equals(w.english)) return w.russian;
    return null;
}
于 2013-10-14T21:46:21.073 回答
0

至于您的代码,正确的检查是在您的 for-next 循环中

  if (english[i].equals(target))
     return i;

另外,考虑单词的大小写是否重要。在您的示例中,“房屋”与“房屋”相同吗?如果大小写无关紧要,您应该使用equalsIgnoreCase()而不是equals,即

  if (english[i].equalsIgnoreCase(target))
     return i;

(稍后移动,因为这似乎是家庭作业)

你可以通过使用两个 ArrayList 来保存单词来节省一些工作,因为 ArrayList 有一个 indexOf() 方法来进行线性搜索。(我不知道为什么 Arrays 实用程序类没有 indexOf 方法)。

也就是说,基于地图的结构似乎更合适(并且效率更高)。

于 2013-10-14T21:48:36.727 回答
0

您需要做的就是获取索引,打印俄语单词然后break循环。

如果只是在 main 中打印,那么你可以这样做。

for (i = 0; i < english.length; i++)
{
    if (english[i].equals(target))
    {
       System.out.println(russian[i]; //Print the russian word
       break;                         //stop looping
    }
}

否则,如果你想让你的翻译方法返回单词的索引,你可以这样做

public static int translate (String [] english, String target)
{
     for (i = 0; i < english.length; i++)
     {
         if (english[i].equals(target))
         return i;                    // No need for the else statement as it would
                                      // fail on first iteration if it wasnt the word     
     }
     return -1;                       // After loop exits return -1 as was not found
}

然后主要你会打电话

String russianWord = russian[translate(english, target)];
于 2013-10-14T21:52:19.060 回答