0

我正在尝试在java中对二维数组实现顺序搜索。

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

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

我曾尝试使用以下代码,但顺序搜索不起作用......

文件#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”,则不会出现此问题(搜索功能完美运行)。

如何解决这个问题?

4

2 回答 2

0

不确定错误在哪里,您应该提供所有代码。

但可能的原因是

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

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

3)不要将搜索例程称为“排序”,人们会期望一个称为排序的例程,嗯,排序..

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

T。

于 2012-07-10T19:03:50.657 回答
0

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

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

  • 尽可能使用集合而不是数组
  • 而不是有两个循环,有一个循环并简单地sortBy用作索引,而不是将列索引硬编码为01
  • 使用.equals()而不是.compareTo() == 0
  • 使用类返回排序结果,而不是将数据塞进数组
于 2012-07-10T18:58:28.297 回答