如何使用两个字符串数组在数组中查找目标

时间:2013-10-14 21:39:28

标签: java arrays

因此,在寻找我的问题的答案时,我只能找到地图结构或只是比较字符串和必须编码停止。我需要能够在语言之间进行翻译并打印出翻译,并让用户能够再次要求翻译另一个单词。我有两串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 个答案:

答案 0 :(得分: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;
}

您可能希望重命名该函数,因为它不会真正转换,只返回整数而不是字符串。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

另外,考虑一下这个词是否重要。在你的例子中,“House”和“house”一样吗?如果情况无关紧要,你应该使用 equalsIgnoreCase()而不是equals,即

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

(稍后搬家因为这似乎是家庭作业)

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

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

答案 3 :(得分: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)];