前提・実現したいこと
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
検索
public void actionPerformed(ActionEvent e) { // TODO 自動生成されたメソッド・スタブ readBook(); //オブジェクト型の配列生成 Book bk[] = new Book[4]; bk[0] = new Book(data[0][0], data[0][1], data[0][2], data[0][3], data[0][4]); bk[1] = new Book(data[1][0], data[1][1], data[1][2], data[1][3], data[1][4]); bk[2] = new Book(data[2][0], data[2][1], data[2][2], data[2][3], data[2][4]); bk[3] = new Book(data[0][0], data[0][1], data[0][2], data[0][3], data[0][4]); //検索文字列を取得 String gStr = text1.getText(); //部分文字列検索 int result1 = book1.getTitle().indexOf(gStr); int result2 = book1.getAuthor().indexOf(gStr); int result3 = book1.getPublisher().indexOf(gStr); int result4 = book1.getYop().indexOf(gStr); int result5 = book1.getIsbn().indexOf(gStr); int result6 = book2.getTitle().indexOf(gStr); int result7 = book2.getAuthor().indexOf(gStr); int result8 = book2.getPublisher().indexOf(gStr); int result9 = book2.getYop().indexOf(gStr); int result10 = book2.getIsbn().indexOf(gStr); int result11 = book3.getTitle().indexOf(gStr); int result12 = book3.getAuthor().indexOf(gStr); int result13 = book3.getPublisher().indexOf(gStr); int result14 = book3.getYop().indexOf(gStr); int result15 = book3.getIsbn().indexOf(gStr); int result16 = book4.getTitle().indexOf(gStr); int result17 = book4.getAuthor().indexOf(gStr); int result18 = book4.getPublisher().indexOf(gStr); int result19 = book4.getYop().indexOf(gStr); int result20 = book4.getIsbn().indexOf(gStr); if (e.getSource() == button1) { //検索ボタン if (result1 != -1 || result2 != -1 || result3 != -1 || result4 != -1 || result5 != -1) { text2.setText(book1.getTitle()); text3.setText(book1.getAuthor()); text4.setText(book1.getPublisher()); text5.setText(book1.getYop()); text6.setText(book1.getIsbn()); } } else if (e.getSource() == button3) { //進むボタン for (int i = 0; i < 3; i++) { if ((result6 != -1 || result7 != -1 || result8 != -1 || result9 != -1 || result10 != -1) && i == 0) { text2.setText(book2.getTitle()); text3.setText(book2.getAuthor()); text4.setText(book2.getPublisher()); text5.setText(book2.getYop()); text6.setText(book2.getIsbn()); } else if ((result11 != -1 || result12 != -1 || result13 != -1 || result14 != -1 || result15 != -1) && i == 1) { text2.setText(book3.getTitle()); text3.setText(book3.getAuthor()); text4.setText(book3.getPublisher()); text5.setText(book3.getYop()); text6.setText(book3.getIsbn()); } } } else if (e.getSource() == button2) { //戻るボタン if ((result11 != -1 || result2 != -1 || result3 != -1 || result4 != -1 || result5 != -1)) { text2.setText(book1.getTitle()); text3.setText(book1.getAuthor()); text4.setText(book1.getPublisher()); text5.setText(book1.getYop()); text6.setText(book1.getIsbn()); } } } }
試したこと
補足情報(FW/ツールのバージョンなど)
まず、「オブジェクトも配列が出来る」ということはご存じでしょうか。
actionPerformed 内で 「//インスタンス生成」として book1~4 を生成していますが、このように「番号で区別する変数」が出来たということはその一連のデータは配列的に管理できるということを表しています。
ですのでこれを(まず)配列にしてみては如何でしょうか。
ご指摘ありがどうございます。
コメント欄にはコードを書く「```」等が使えませんので、コードはご質問を編集して追加なり修正なりしてください。
さて、ここから必要な処理が二つ出来ます。一つは「条件に合った蔵書を見つける事」もう一つは「進む・戻るボタンでそれらを1つずつ表示すること」です。
プログラミングの進め方は人それぞれですが、一度に二つ以上のことを進めるのは慣れないうちは大変です。結果が分かり易いほうがモチベが保ち易いこともあるので、ひとまず条件による絞り込みは無視して全部の蔵書を「進む・戻るボタン」を駆使して見れるようにしては如何でしょう。
(「部分文字列検索」~の result に代入している部分や「検索ボタン」、進む・戻るボタンの所にある result を使っている if 文等をバッサリ消してしまって、「進む」「戻る」ボタンの機能のみとしてしまったほうが良いかと思います。勿体ないと思うのでしたら「メモ帳」等にカット&ペーストで取っておいても良いです。)
蛇足ですが、BookData のタイトルのスペル間違ってませんか。
ご指摘ありがとうございます。
配列化することで最初の書が( book1 では無く)bk[0], (book2 では無く)bk[1] といった具合に [] の中の数値によって n 番目の書を対象とすることが出来るようになりました。そして、[] の中には変数が使用できますね。
readBook 内で data[index] や data[i] 等としていることと同じです。
さて、仮に「 n 番目の書を表示する」為の変数として(int 型の) bookIndex なる変数を作ることにします。
bookIndex が 0 の状態で「 bk[bookIndex] 」という部分を通ると、それは bk[0] と同じ、すなわち最初の書を指します。
bookIndex が 1 の状態で同じく「 bk[bookIndex] 」という部分を通ると、それは bk[1] と同じ、すなわち2番目の書を指します。
では、2番目の書を示している状態から、最初の書を示すようにするにはどうすればいいのかといいますと…
bookIndex から 1 を引いたうえで、bk[bookIndex] を通ればよいことになります。
実装的には、まず、int bookIndex をフィールドとして宣言します。
次に bk[bookIndex] で示される書の情報を各テキストフィールドに設定(表示)するメソッド(仮に printBook() )を作ります。して
次の書を表示する場合には bookIndex を +1 して printBook() を呼び、前の書を表示する場合には bookIndex を -1 して printBook() を呼ぶことで、前後へのページ移動が出来ます。
なお、bookIndex がマイナスになったり、書数以上にならないようにしておかないと、異常終了してしまいますのでお気を付けください。
解決することができました。ありがとうございました。
解決したからといって内容を消さないでください。
このサイトは、後から来る人への情報のデータベースの役割も想定されています。
回答1件
あなたの回答
tips
プレビュー