🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

2回答

359閲覧

コンストラクタから必要な情報だけを取り出す方法について

amezeal

総合スコア7

Java

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/11/20 03:22

郵便番号(zipcode1)を入力したら、データの中から同じ郵便番号(zipcode)の建物の名前が表示されるプログラムを作っています。
compareTo()メソッドで郵便番号(zipcode)の検索をしたいのですが、郵便番号(zipcode)のデータがうまく取り出せません。
郵便番号(zipcode)のデータだけを取り出す方法を教えてください。

ソースコードは以下の通りです。
import java.io.FileNotFoundException;
import java.io.File;
import java.util.Scanner;

class Eschool {
Eschool(String name, int zipcode, String address, String tel, double latitude, double longitude){
this.name=name;
this.zipcode=zipcode;
this.address=address;
this.tel=tel;
this.latitude=latitude;
this.longitude=longitude;
}
private String name;
private int zipcode;
private String address;
private String tel;
private double latitude;
private double longitude;

public void setName(String n) {
name = n;
}

public void setZipcode(int z){
zipcode=z;
}

public void setAddress(String a){
address=a;
}

public void setTel(String t){
tel=t;
}

public void setLatitude(double l){
latitude=l;
}

public void setLongitude(double L){
longitude=L;
}

public String getName() {
return name;
}
public int setZipcode(){
return zipcode;
}
public String getAddress(){
return address;
}
public String getTel(){
return tel;
}
public double getLatitude(){
return latitude;
}
public double getLongitute(){
return longitude;
}

public String toString(){
String str=String.valueOf(name+":"+ "〒"+zipcode+" "+address+" "+"TEL:"+tel+" "+latitude+" "+longitude);
return str;
}
}

class Rp6 {
static Eschool[] eslist = new Eschool[100];

public static void main(String[] args){
int i = 0;
try {
File file = new File("shougakkou-utf.csv"); // input the csv file name
Scanner sc = new Scanner(file);
while(sc.hasNextLine()){ // read a line from the file
String str = sc.nextLine();
String[] tmp = str.split(",", 6);
if (tmp.length == 6){

Eschool es = new Eschool(tmp[0], Integer.parseInt(tmp[1]), tmp[2], tmp[3], Double.parseDouble(tmp[4]), Double.parseDouble(tmp[5])); eslist[i] = es; // store the instance to the list i ++; } } } catch (FileNotFoundException e){ System.err.print(e); } System.out.print(eslist[1]); System.out.print("zipcode:"); String zipcode1=stdIn.nextInt(); if(zipcode1.compareTo(zipcode)==0){ System.out.println(zipcode+": "+name[]); }

 }
}

実行結果が
$ java Rp6
zipcode: 4328024
4328024: 浜松市立西小学校
となるようにしたいです。
ちなみにデータはまた別のファイルであります。

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

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

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

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

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

ironya

2019/11/21 04:24

このコード実際に動くのですか? String zipcode1 = stdIn.nextInt(); のところで、 stdIn は new Scanner(System.in) と捉えた時、 この行はコンパイルエラーになります。 動かして、期待する結果にならないソースをそのまま添付できませんか?
guest

回答2

0

考え方として、 Eschool に getZipcode() メソッドを追加するのは gentaro さんのいう通りで、あとは、for 文などで eslist の要素を順に取り出して、 getZipcode() の結果と、stdIn から取得した zipcode1 の値を比較して一致するものを探せば良いと思います。
ただ、stdIn から nextInt() だと int 型ですから、 compareTo()で比較するには Integer 型に変換したり、 next() で文字列で受け取って比較するなどする感じでしょうかね。
けども、String にするなら equals() メソッドで等価であることは確認できるので、 Eschool 側も zipcode は文字列にしておいて、文字列で処理すれば良い気がしますね。。。
大小比較でなく、等価が評価できれば良いのであれば、 Integer にしたとしても同じことです。
なぜ compareTo なのでしょうね?(学校の課題だったりしませんよね。。。)

あと気になったのですけども、 実世界の郵便番号ってそれだけではユニークな住所にはなりません。
同じ郵便番号でも丁目が違ったり、区画番号や建物番号が異なったり、集合住宅だと部屋が違ったりと、郵便番号と住所は、1対多 の関係です。そのため、そもそも郵便番号が一致するだけの条件だと、複数の住所があり得るので、一致した時点で把握できた住所で求めたい住所になるのかというと、そういうものでもありません。

もちろん、実世界の話ではなくて架空世界の住所と郵便番号の関係であれば、1対1 の関係もあり得ますので、この限りではありませんが。(学校の課題などだと、そういう仮定で良いことにするのはありそうな話です・・・が、課題なら自分で考えましょう!)

投稿2019/11/21 04:25

編集2019/11/21 04:38
ironya

総合スコア456

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

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

0

Eschool クラスにgetZipcode()メソッドを用意すればいいだけでは。
(「コンストラクタから」の意味はよくわからなかったけど)

投稿2019/11/20 03:27

編集2019/11/20 03:28
gentaro

総合スコア8947

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問