2012-07-10 122 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.