2012-07-10 97 views
0

我想在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”没有出现在第一行(搜索功能完美),则不会出现此问题。

如何解决这个问题?

+0

我刚刚添加了“家庭作业”标签。没有绕过它。 – Bohemian 2012-07-10 18:53:42

+0

什么不起作用?你做了什么来弄清楚什么是错的? – Marvo 2012-07-10 18:58:27

+0

具体问题是,如果我尝试在列“n”中搜索术语“k”,并且术语“k”出现在第一行(不管哪列),搜索功能将列出*中的行数array *结果找到并列出结果:*行数*,k(重复数组中的行数)。如果“k”没有出现在第一行(搜索功能完美工作),则不会出现此问题... – 01jayss 2012-07-10 19:03:19

回答

0

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

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

  • 使用数组尽可能
  • 的类别代替,而不是具有两个环路,有一个环和简单地使用sortBy作为索引,而不是硬编码的列索引为01
  • 使用.equals()代替.compareTo() == 0
  • 使用类返回排序结果,而不是死记硬背数据到一个数组
0

不知道错误在哪里,你应该提供所有的代码。

但可能的原因是

1)您同时使用for(int x=0; x<totalNo;x++)for(int x=0; x<data.length;x++),我会坚持到只有2号方式,那么你甚至需要totalNo参数

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

3)不要调用搜索程序“排序”,人们期待一个叫排序,好了,那种..

常规0

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

T.