1

我正在编写一个简单的 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();
    }
}

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

4

4 回答 4

5

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

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

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

于 2013-05-21T22:16:39.987 回答
4

您需要在 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
于 2013-05-21T22:15:33.373 回答
3

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

是的,有可能。

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

于 2013-05-21T22:16:10.063 回答
2

你可以这样做:

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],可以根据输入字符串检查数组的每个元素。

于 2013-05-21T22:19:55.340 回答