【问题标题】:Java array questionJava数组问题
【发布时间】:2011-06-15 09:23:57
【问题描述】:

抱歉,这里是个愚蠢的问题,我已经用谷歌搜索过了,但我搜索的任何东西似乎都是返回使用二进制搜索等的方法,但我需要的实际上要简单得多。

我有多种语言。我正在创建一个扫描仪,要求输入。试图做到这一点,如果用户输入的语言不在数组中,它会显示一个错误并再次询问。应该很简单,我只是画了一个空白。

有人可以帮忙吗?这是我到目前为止所拥有的!

      Scanner scan = new Scanner(System.in);
      language = scan.next();
      while( language NOT IN ARRAY languages) {
       System.out.print("error!");
       language = scan.next();
     }

【问题讨论】:

  • 那甚至不是有效的 Java 代码...
  • 所以问题是尝试确定一个值是否已经在数组中,即在数组中搜索特定值?
  • 我意识到这一点,它的伪代码。指出我说它是有效代码的地方?
  • Bert F - 是的,就是这样! :) 我有一个用户输入的字符串,然后我搜索数组以查看它是否包含在其中。
  • 这是作业吗?只需要使用数组操作吗?

标签: java arrays search


【解决方案1】:

我现在更好地理解了你的问题。您肯定应该使用Set。但是你会想要使用集合的contains() 方法来检查语言是否存在。

Scanner scan = new Scanner(System.in);
language = scan.next();
while(!set.contains(language)) {
    System.out.print("error!");
    language = scan.next();
}

旧答案,但仍然是相关信息:
您要使用的是Set 集合类型。集合不允许重复条目。 来自 Javadocs:

一个不包含重复元素的集合。

Set<String> set = new HashSet<String>();
// will not add another entry if set contains language already
set.add(language);

另外,如果你想知道值是否被拒绝,你可以使用 add() 方法的返回类型。如果项目不存在则返回 true,否则返回 false。

【讨论】:

  • 奇怪的set使用方式;为什么不直接使用 contains() 方法?同样这样,他将累积集合中的所有输入,这不是他想要的。
  • 这几乎是一个完整的答案。我还要指出 Set 类上的 contains("xyz") api,它可用于驱动该循环。
【解决方案2】:

你可以这样做:

public static boolean contains(String language, String[] lang_array) {
    for (int i = 0; i < lang_array.length; i++) {
        if (lang_array[i].equals(language))
            return true;
    }

    return false;
}

public static void main(String[] args) {
    String[] lang_array = {"Java", "Python", "Ruby"};
    Scanner scan = new Scanner(System.in);
    String language = scan.next();
    while(!contains(language, lang_array)) {
        System.out.print("error!");
        language = scan.next();
    }
}

【讨论】:

    【解决方案3】:

    您可以这样做是您确实需要使用数组:

       Arrays.sort(languages);
       Scanner scan = new Scanner(System.in);
       language = scan.next();
       while( Arrays.binarySearch(languages, language) < 0) {
        System.out.print("error!");
        language = scan.next();
       }
    

    【讨论】:

    • 那会是 while(!Arrays.binarySearch(languages, language)
    • @user476033 谢谢。我修好了。
    【解决方案4】:

    你可以做两件事:

    遍历数组并将每个元素的内容与您尝试查看的内容进行比较,以查看每次添加语言时是否存在。

    使用具有.contains() 方法的 LinkedList 或其他类型的 Java 结构,这将在某种程度上执行类似于我提到的数组的操作。

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多