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

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

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

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

Q&A

解決済

2回答

1482閲覧

2分探索後、出力するデータの身長が0表示され、困っています。

gyro16

総合スコア89

Java

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

0グッド

0クリップ

投稿2017/09/16 03:14

###前提・実現したいこと

2分探索後、出力するデータの身長が0表示され、困っています。

期待出力)
データ:松富明雄 169 0.8

このソースだと出力)
データ:松富明雄 0 0.8

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

java

1import java.util.Arrays; 2import java.util.Scanner; 3import java.util.Comparator; 4class En3_7{ 5 static class PhyscData{ 6 private String name; 7 private int height; 8 private double vision; 9 public PhyscData(String name, int heigth, double vision){ 10 this.name = name; this.height = height; this.vision = vision; 11 } 12 public String toString(){ 13 return name + " " + height + " " + vision; 14 } 15 public static final Comparator<PhyscData> VISION_ORDER = new VisionOrderComparator(); 16 private static class VisionOrderComparator implements Comparator<PhyscData>{ 17 public int compare(PhyscData d1, PhyscData d2){ 18 return (d1.vision > d2.vision) ? 1 : (d1.vision < d2.vision) ? -1 : 0; 19 } 20 } 21 } 22 public static void main(String[] args){ 23 Scanner stdIn = new Scanner(System.in); 24 PhyscData[] x = { 25 new PhyscData("赤坂忠雄", 162, 0.3), 26 new PhyscData("長浜良一", 168, 0.4), 27 new PhyscData("加藤富明", 173, 0.7), 28 new PhyscData("松富明雄", 169, 0.8), 29 new PhyscData("浜田哲明", 174, 1.2), 30 new PhyscData("武田信也", 171, 1.5), 31 new PhyscData("斉藤正二", 175, 2.0), 32 }; 33 System.out.print("視力いくつの人を探しますか:"); 34 double vision = stdIn.nextDouble(); 35 int idx = Arrays.binarySearch(x, new PhyscData("", 0, vision), PhyscData.VISION_ORDER); 36 if(idx < 0) 37 System.out.println("その値の要素は存在しません。"); 38 else{ 39 System.out.println("その値はx[" + idx + "]にあります。"); 40 System.out.println("データ:" + x[idx]); 41 } 42 } 43}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答2

0

ベストアンサー

コンストラクタでint heigthとスペルミスしています。

結果、this.height = heightが、フィールドの方を参照しているため、デフォルトの0のママとなります。

投稿2017/09/16 03:17

maisumakun

総合スコア145183

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

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

gyro16

2017/09/16 03:31

コンストラクタでミスタイプしているのでint heightがデフォルトの0のまままんですね。 分かりました。コンストラクタのタイプには気をつけます。
maisumakun

2017/09/16 04:06

フィールドと引数で同じ名前を使うとどちらかわかりづらいですし、「引数には別な名前を使う」というのも1つの方法かなと思います。
guest

0

質問とは関係ないですが、Comparatorのところは匿名クラスとDouble.compareを使ってこのように書けます。

java

1public static final Comparator<PhyscData> VISION_ORDER = new Comparator<PhyscData>(){ 2 public int compare(PhyscData d1, PhyscData d2){ 3 return Double.compare(d1.vision, d2.vision); 4 } 5};

もしくは、Java8が使えればこんなことも。

java

1public static final Comparator<PhyscData> VISION_ORDER = Comparator.comparingDouble(d -> d.vision); 2

投稿2017/09/16 06:29

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問