0

Javaで2D配列に順次検索を実装しようとしています。

私は現在2つのクラスを持っています。最初のクラスでは、ユーザーはデータ値を配列に入力し、検索したい用語を入力します (入力した配列/データ値に)。

この検索は、順次検索を実行し、結果を最初のクラスに戻すメソッド (2 番目のクラス) によって処理されます。

この次のコードを使用してみましたが、順次検索が機能しません...

ファイル #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++)を使用しますfor(int x=0; x<data.length;x++)。私は 2 番目の方法のみに固執します。その場合、totalNo 引数さえ必要ありません。

2) 文字列比較には と の両方を使用しますsearchterm.equals(data[x][0])searchterm.compareTo(data[x][1]) == 0最初の方法に固執します

3) 検索ルーチンを 'sort' と呼ばないでください。

if (searchterm.equals(data[x][sortBy ])) {4) 2 種類の検索を区別する必要がないため、使用を検討してください。

T.

于 2012-07-10T19:03:50.657 に答える
0

バグがあります:sortメソッドでは、最初の for ループ ( when sortBy == 0) が when で終了しますが、 (2 番目のループのように) 終了x<totalNoする必要があります。x<data.length

一般的なコメントとして、機能するかどうかにかかわらず、あなたのコードはひどいものです。私はお勧め:

  • 可能な限り配列の代わりにコレクションを使用する
  • 2 つのループを使用するのではなく、1 つのループを使用して、列のインデックスをまたはとしてハードコーディングする代わりに、単純にインデックスとして使用しsortByます。01
  • .equals()の代わりに使用.compareTo() == 0
  • データを配列に詰め込むのではなく、クラスを使用してソート結果を返す
于 2012-07-10T18:58:28.297 に答える