質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

414閲覧

クラスについて、番兵法を用いて線形探索を行う

ryo0614du

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2018/01/14 06:47

class Person { String name; int age; public String toString() { String s = ""; s += this.name; s += "(" + this.age + ")"; return s; } Person(String name, int age) { this.name = name; this.age = age; } }
import java.util.Scanner; public class Teishutsu13_2 { public static int sentinelSearch(Person[] x, Person key) { x[x.length - 1] = key; int i = 0; while (x[i] != key) { i++; } return i; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); Person[] x = new Person[10]; x[0] = new Person("あいだ", 19); x[1] = new Person("いいだ", 25); x[2] = new Person("うしお", 30); x[3] = new Person("かけい", 21); x[4] = new Person("きすぎ", 20); x[5] = new Person("くるま", 19); x[6] = new Person("さなだ", 18); x[7] = new Person("しむら", 22); x[8] = new Person("すどう", 23); x[9] = new Person("なし", 0); System.out.print("名前を入力してください:"); String name = sc.next(); System.out.print("年齢を入力してください:"); int age = sc.nextInt(); Person key =new Person(name, age); int idx = sentinelSearch(x, key); if (idx == x.length - 1) { System.out.println("その値は存在しません"); } else { System.out.println("その値はx[" + idx + "]にあります"); } System.out.println(idx); } }

 名前と年齢の組をキーとして学生を線形探索によって検索し結果を表示したいのですが、どの組を検索しても必ず探索できず見つけることができません。試しにidxを表示させてみると番兵として置いた9が表示されました。おそらく入力した組と配列の中の組とが一致せず最後まで検索され9と表示されているのだと思います。しかしどこが間違っているのかわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sentinelSearch内での、Personインスタンスの比較に問題があります。

!=だと、インスタンス自体が同じか評価してしまいます。
Personクラスでequalsメソッドをオーバーライドし、適切な比較を実装してください。
その上で、x[i] != keyではなく!x[i].equals(key)と書いてください。

投稿2018/01/14 06:57

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo0614du

2018/01/14 07:09

ありがとうございます! できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問