【问题标题】:Is it possible to search through an array and return the index of the value是否可以搜索数组并返回值的索引
【发布时间】:2013-05-21 22:13:03
【问题描述】:

我正在编写一个简单的 Java 程序,该程序基本上存储了以前在图表中出现过的艺术家数组;这是我到目前为止的程序代码

package searching;

import java.util.*;

public class Searching {
    public static void main(String[] args) {          
        Scanner scanner = new Scanner(System.in);

        String artists[] = {"Rihanna", "Cheryl Cole", "Alexis Jordan", "Katy Perry", "Bruno Mars",
                        "Cee Lo Green", "Mike Posner", "Nelly", "Duck Sauce", "The Saturdays"};

        System.out.println("Please enter an artist...");
        String artist = scanner.nextLine();
    }
}

我只是想知道,用户是否可以输入其中一位艺术家的姓名,获取代码以搜索数组并返回该值的索引?如果是这样,我将如何去做,因为我不知道从哪里开始......提前谢谢!

【问题讨论】:

    标签: java arrays search


    【解决方案1】:

    对于未排序的数组,一种选择是将艺术家放在一个列表中并使用List.indexOf()

     List<String> artistsList = Arrays.asList( artists );
     ...
     int index = artistsList.indexOf( artist );
    

    如果对艺术家进行了排序,您可以使用Arrays.binarySearch()

    【讨论】:

      【解决方案2】:

      您需要在 for 循环中遍历艺术家数组,然后如果值等于 artist 值,则返回索引。

          for (int i = 0; i < artists.length; i++) {
              String artistElement = artists[i];
              if (artistElement.equals(artist)) {
                  System.out.println(i);
              }
          }
      

      这是发生在我身上的事情:

      Please enter an artist...
      Mike Posner
      6
      

      【讨论】:

      • 在为OP解决作业之前,请参考How to ask and answer homework questions?以了解未来的类似问题。
      • @LuiggiMendoza 引用您的链接:“Don't downvote others who answer homework questions in good faith, even if they break these guidelines.
      • @LuiggiMendoza 他没有明确表示这是家庭作业。即使他这样做了,我也会抽出时间自己写这篇文章,以帮助需要帮助的人。如果你不喜欢我的做法,我很抱歉,但你不必表现得像 SO 的老板。
      • @tieTYT,非常感谢队友的帮助......至于那些被认为不是功课的人,是我在休息几年后试图回到 Java。
      • @LuiggiMendoza:哦,看在皮特的份上,放弃吧。许多人通过 SO 的精彩论坛学习。如果没有这个惊人的资源,我将无法做我现在能做的一半事情。我们都以不同的方式学习。连续几个小时盯着屏幕对我没有吸引力。快速找到答案,通读并理解答案并发展我对该语言特定部分的知识对我来说更具吸引力 - 因此我可以毫无问题地为一个简单的问题发布一个简单的答案。
      【解决方案3】:

      我只是想知道,用户是否可以输入其中一位艺术家的姓名,获取代码以搜索数组并返回该值的索引?

      是的,有可能。

      由于你不知道从哪里开始,我想说你可以开始遍历数组(可能使用for 循环)并验证artist 变量是否为等于数组的当前元素。如果它们等于,那么您可以只返回数组元素的当前索引。如果未找到任何内容,则返回您可以处理的默认值(如 -1)并返回类似 Artist not found 的消息。

      【讨论】:

      • 我喜欢开头,但我建议将其编写为一个适当命名的小方法(并可能显示签名的样子)。然后就变得更自然了:if (knownArtist(artist)) { .. } else { .. }.
      • @user2246674 抱歉,这几乎完成了 50%(或更多)的作业。
      • 我不同意。它只是为将问题划分为合乎逻辑的小部分提供指导。没有这个建议也可以完成作业(根据这个答案中的指导)。
      • @user2246674 - 将问题分解成小部分是编程的主要任务和技能之一。
      • @AndyThomas-Cramer 我同意!这就是为什么应该教导指导新手程序员如何去做。这是一项后天习得的技能,一个人可以在 CS 程序中一路挣扎,但仍然写出非常糟糕的代码。
      【解决方案4】:

      你可以这样做:

      int index = -1;
      
      for (int i = 0; i < artists.length; i++) {
          if (artist.equals(artists[i]))
              index = i;
      }
      
      if (index == -1)
          System.out.println("Artist not found");
      else
          System.out.println("Index of artist: " + index);
      }
      

      这不像 tieTYT 的解决方案那样雄辩,但可以解决问题。索引设置为 -1。 for 循环将每个艺术家与数组中的每个值进行比较。如果找到匹配项,则将索引设置为元素的索引。

      在for循环之后,如果索引仍然是-1,则通知用户没有找到匹配项,否则输出相应的艺术家和索引。

      for 循环的用户是滚动数组内容并将元素与给定值进行比较的最常用方法。通过调用艺术家[i],可以根据输入字符串检查数组的每个元素。

      【讨论】:

      • -1:同@tieTYT:在为OP解决作业之前,请参考How to ask and answer homework questions?了解未来的类似问题。
      • @LuiggiMendoza:如果您要对帮助新用户的每一次尝试都投反对票,那么您将在这里待很长时间。我将继续这样做,因为在我刚开始的时候有很多有用的 SO 用户帮助了我。
      • 如果我是这样,那么我会否决 OP 的问题,甚至投票结束。相反,我提供了一个解释解决问题的方法的答案,而不是给出完整的答案,只是让另一个僵尸编码员复制/粘贴他/她在网上帖子中看到的任何内容。
      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 2013-06-04
      • 2012-01-15
      • 2021-09-25
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多