Java搜索2D字符串数组

时间:2012-07-10 18:51:14

标签: java

我正在尝试在java中的2D数组上实现顺序搜索。

我目前有两节课。在第一个类中,用户将数据值输入到数组中并输入他希望搜索的术语(在他刚输入的数组/数据值中)。

此搜索由一个方法(第二类)处理,该方法进行顺序搜索,然后将结果传递回第一个类。

我已尝试使用以下代码,但顺序搜索无效...

文件#1(输入文件):

static public void s_2d_string () {
            int counter,x;
            counter = 2;

            String[][] sortValues = new String[counter+1][2];

            for (x=0;x<counter;x++) {
                    System.out.print("Enter book name: ");
                sortValues[x][0] = readLine();
                    System.out.print("Enter book author: ");
                sortValues[x][1] = readLine();

            }
            System.out.print("Which column would you like to sort by? 1 or 2? ");
            String sortBystring = readline();
            int sortBy;
            sortBy = Integer.parseint(sortBystring);
            sortBy = sortBy-1;

            System.out.print("Enter search term: ");
            String searchterm = readLine();

            sortValues = s.sort(sortValues,counter, sortBy, searchterm);

            int flagcounter_int = Integer.parseInt(sortValues[0][0]);

            System.out.println(flagcounter_int + " results found.");

            for (x=0;x<flagcounter_int;x++) {
                    System.out.println(sortValues[x+1][0] + ", " + sortValues[x+1][1]);
            }
    }

文件#2:

static public String[][] sort (String data[][], int totalNo, int sortBy, String searchterm)  {
        boolean found = false;    
        int flagcounter = 0;
            if (sortBy == 0) {
                    for (int x=0; x<totalNo;x++) {
                            if (searchterm.equals(data[x][0])) {
                                    found = true;
                                    flagcounter = flagcounter+1;
                                    data[flagcounter] = data[x];
                            }
                    }
            }
            if (sortBy == 1) {
                    for (int x=0; x<data.length;x++) {
                            if (searchterm.compareTo(data[x][1]) == 0) {
                                    found = true;
                                    flagcounter = flagcounter+1;
                                    data[flagcounter] = data[x];
                            }
                    }
            }
            String flagcounter_string = Integer.toString(flagcounter);
            data[0][0] = flagcounter_string;
                    return data;
                    }

具体问题是,如果我尝试在“n”列中搜索术语“k”并且第一行中出现术语“k”(无论哪一列),搜索功能将列出行数找到数组结果并列出结果:行数k(重复数组中的行数)。如果第一行中没有出现“k”(搜索功能完美无缺),则不会出现此问题。

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你有一个错误:在sort方法中,第一个for循环(当sortBy == 0)在x<totalNo时终止,但它应该是x<data.length(就像你的第二个循环)。

作为一般性评论,您的代码是否可怕,无论它是否有效。我建议:

  • 尽可能使用集合代替数组
  • 而不是有两个循环,只有一个循环,只需使用sortBy作为索引,而不是将列索引硬编码为01
  • 使用.equals()代替.compareTo() == 0
  • 使用类返回排序结果,而不是将数据塞入数组

答案 1 :(得分:0)

不确定错误的位置,您应该提供所有代码。

但可能的原因是

1)你同时使用for(int x=0; x<totalNo;x++)for(int x=0; x<data.length;x++),我会坚持第二种方式,然后你甚至不需要totalNo参数

2)对于字符串比较,你同时使用searchterm.equals(data[x][0])searchterm.compareTo(data[x][1]) == 0,我会坚持第一种方式

3)不要调用搜索例程'sort',人们会期望一个名为sort的例程,好吧,排序......

4)考虑使用if (searchterm.equals(data[x][sortBy ])) {,因为那时你不需要区分这两种类型的搜索。

吨。