【问题标题】:String Array Search input [duplicate]字符串数组搜索输入[重复]
【发布时间】:2016-02-20 01:46:36
【问题描述】:

我有一个来自文本文件的名称列表:MARY、PATRICIA、LINDA、BARBARA、ELIZABETH、JENNIFER、MARIA,我将它们放入一个字符串数组中。我希望能够搜索数组,但我遇到了问题。我想使用快速排序算法对其进行排序,并使用二进制搜索进行搜索,但我试图让一些简单的工作。如果我搜索“MARY”,结果将是“MARY is not it”

public class NameSearch {

public static void main(String[] args) throws IOException{
    // TODO Auto-generated method stub

    FileReader woMen = new FileReader("names.txt");

    String[] womenArray;
    womenArray = new String[64];

    BufferedReader reader = new BufferedReader(woMen);
    String line = null;

        for (int j=0;j<womenArray.length;j++)
        {
            womenArray[j] = reader.readLine();
        }

    reader.close();

    int x = 0, y =0;


    System.out.println("Name?");
    Scanner keyboard = new Scanner(System.in);
    String input = keyboard.nextLine();

    for(int i=0;i<womenArray.length;i++) {
        if (input == womenArray[i]) {
            System.out.println("Found! "+input);
        }
        System.out.println(womenArray[i]+" is not it");
    }


}

}

【问题讨论】:

    标签: java arrays file


    【解决方案1】:

    错误出现在if 语句中。要匹配字符串,您可以使用 .equals 方法,如下所示:

    System.out.println("Name?");
    Scanner keyboard = new Scanner(System.in);
    String input = keyboard.nextLine();
    
    for(int i=0;i<womenArray.length;i++) {
        if (womenArray[i].equals(input)) {
            System.out.println("Found! "+input);
        }
    }
    

    要对数组进行排序,请使用 Array 的 sort 方法:

    Arrays.sort(womenArray);
    

    Read about Arrays.sort(Object[] a) here

    另外,您可以使用 Arrays 内置的 binarySearch 方法。阅读更多关于它的信息here

    在您的代码中,它看起来像这样:

    int location = Arrays.binarySearch(womenArray, input)
    

    如果location 是负数,则表示未找到您要搜索的值。

    int location = Arrays.binarySearch(womenArray, input.toUpperCase());
    
    if (location > 0){    
       System.out.println("found it at " + location + " " + womenArray[location]);
    }
    

    【讨论】:

    • 嗯...我将如何使用 Arrays.Binary Search 来搜索这个?我怎样才能让它返回成功?
    • 所以在排序 (Arrays.sort(....)) 之后,并且在从用户那里获取输入之后,你不要写 for 循环。你只需写 int location = Arrays.binarySearch(womenArray, input);
    • 哦,太棒了,然后我调用 display womenArray[location] 作为结果?
    • 一个问题,womenArray里面的字符串都是大写字母?如果是,那么您将不得不做 1 个小改动: int location = Arrays.binarySearch(womenArray, input.toUpperCase());然后是的,你用 womenArray[location] 打印出女人的名字。请记住,如果位置为负数(小于 0),则表示找不到该名称
    • 我编辑了我的答案。请再次检查。如果您有任何问题,请告诉我
    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2012-03-07
    • 2014-10-06
    • 2012-01-13
    相关资源
    最近更新 更多