「name」、「sex」などのデータがあり、
そのデータをHumanオブジェクトとして、可変長配列(humanArray)に格納してあります。
humanArray.add( new Human( name, sex ) ); // このような感じでしょうか。
標準入力から「name」が入力されると、オブジェクトを参照し、
HumanArrayに格納されているHumanオブジェクトの「name」データを一つ一つ比較して、
一致したら配列の要素をすべて出力する。
というプログラムを作りたいのです。
問題としているのは、
一致するかの照合処理を別のクラスで行うので、
nameを処理を行うクラスに渡す必要がありますが、
可変長配列のi番地に入っているオブジェクトのnameを
得るための方法がわかりません。
Humanクラスに
public static String throwName()
{
return name;
}
のようなクラスを作って、
処理を行うクラスで、
String name = humanArray.get(i).throwCode();
というような処理を行うイメージなのですが・・・。
どのようにすれば良いのかご教授ください。
どのように質問をすれば良いのかも良くわからないので情報が少ないやもしれません
その時は遠慮なく「追加情報が欲しい。」と仰ってください。
例
-----配列の内容-----
阿部 男
--------------------
馬場 女
--------------------
千葉 女
--------------------
標準入力:馬場(name)
-------Humanクラスの内容--------
class Human
{
private String name;
private String sex;
public Human( String nm, String s )
{
name = nm;
sex = s;
}
public static void showArticle()
{
System.out.println(name);
System.out.println(sex);
}
}
No.1ベストアンサー
- 回答日時:
JAVAの勉強をされているものとお見受けしたので、
直接回答するよりも、ご自分で調べた方がよくわかると思いますので
お節介とは思いましたが、あえてアドバイスとさせてください。
次のヒントを調べてみてください。それによって答えがわかることと思います。
回答を直接得たかった場合は、すみません。
(1)「static」というキーワードはどんな意味をもっているでしょうか。
クラスメソッドとインスタンスメソッドの違いについて調べてみてください。
(2)JAVA言語そのものには、可変長配列はなく、Java 2 SDKには、標準で
可変長配列のように使えるクラスがあります。お使いになっているのは
恐らくこれです。
既にget()メソッドはご存知なので、あとはこのクラスに入っている
要素の個数を得るためのメソッドがわかれば、for文で順に値を
取り出し、ひとつひとつname属性を比較することができます。
SDKに付属のクラスにどのようなメソッドがあるか等の説明は、
SDKのAPIドキュメントに書かれています。
・(1)(2)がわかれば、とりあえず答えを得ることができます。
以降は応用になります。
(3)(2)で述べた可変長配列に相当するクラスには、iterator()という
メソッドがあります。このメソッドは「このオブジェクトが保有する
各要素を順に返すjava.util.Iteratorオブジェクト」を返します。
これを使うことで、繰り返し処理をより汎用的に書くことができます。
(ただし速度は若干低下します。)
使い方を調べてみてはいかがですか。
(4)いわゆる「配列」は、要素を順に処理するのには適していますが、
データベースのように、キーに対応する値を取得するのには効率が
悪い面があります。このような用途のために、Javaにはjava.util.Map
インタフェースおよびそのサブクラス(例:java.util.HashMap)が
用意されています。
(1)~(3)までで作成した処理を、Mapを使って書き換えることで
メリットがわかります。
ご回答ありがとうございます。
まず始めにお詫びを。
普段から可変長配列を利用する時はArrayListを利用していたので、
可変長配列=ArrayListという先入観を持って話をしてしまいました。
そして、問題に関しては
可変長配列に入っている、利用したいオブジェクトを
Humanクラス型にキャストしてインスタンスを作り出し、
そのインスタンス変数を使ってHumanクラスのメソッドを呼び出す事で解決する事ができました。
実際のコードに関しては上で回答してくださった方の
お礼欄に書かせていただきます。
ご了承ください。
No.3
- 回答日時:
こんにちは
>Humanクラスに
>public static String throwName()
>{
> return name;
>}
Humanクラスは値を保持するビーンクラスですよね?
であるならば複数のHumanオブジェクトが生成されるのに
その中の値へのアクセスメソッドがstaticなのは問題ではないですか?
ここは#2さんが仰るようにstaticを外すべきです。
それと、メソッド名もgetNameのように書くと慣例に沿っていてベターだと思います。
きっと既にコーディングをされて動作が期待通りでない上での質問だと思われますが、
staticの意味、目的なりを把握されればきっと問題点が見えてくると思います。
ご回答ありがとうございます。
throwNameメソッドにstaticを付けていた事については、
今まではstaticを付けてメソッドを道具として利用するのみだったので、
そのまま付けてしまいました。
また、メソッド名に関しても、
フィールドを返すメソッドは「get+フィールド」
と命名する事を知りましたので、
HumanクラスのthrowNameメソッドは
public String getName(){
return name;
}
と修正しました。
また、Humanクラスに
public String getHumanObj(){
String human = "" + name + " " + sex;
return human;
}
というメソッドを追加しました。
データを得る際の実際のコードは
String name = "馬場";
for( int i=0; i<humanArray.size(); i++){
Human human = new humanArray.get(i);
nm = human.getName();
if( name.equals( nm ) ){
humanObj = human.getHumanObj();
System.out.println( humanObj );
}
}
とする事で、humanArrayの1番地に入っているオブジェクトの要素である
「馬場 女」を出力する事ができました。
(完成したコードを見ずに、改めて書いているのでコードを間違えているかもしれませんが。)
ご回答くださった皆様に改めてお礼申し上げます。
ありがとうございました。
No.2
- 回答日時:
>Humanクラスに
>public static String throwName(){
>return name;
>}
>のようなクラスを作って、
Human クラスのインスタンスから名前を得るためのメソッドを追加するということで考え方はいいと思いますが、
static を付けないで
public String throwName(){
return name;
}
のようにすればいいかと思います。
ご回答ありがとうございます。
staticに関しては、オブジェクトに関連しない。
という意味は知っていたのですが、
今まではstaticを付けてメソッドを道具として利用する場合が多かったので、
そのまま付けてしまいました。
問題に関しては解決できました。
実際のコードに関しては上で回答してくださった方の
解答欄に書かせていただきます。
ご了承ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの[]
-
servletからjspへオブジェクト...
-
VB.netでメソッドからコントロ...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
javaで、、、
-
Vba ListViewの行挿入に関して...
-
[ASP.NET]DropDownListのDB連携...
-
オブジェクトの参照渡しについて
-
JSPでのArrayListの表示につい...
-
Objectクラスのオブジェクトを...
-
MessageBox.Show(Me,…の「Me」...
-
可変長配列に格納されたオブジ...
-
SocketでXMLオブジェクトを送信...
-
Excel VBA 定数にオブジェクト...
-
GridViewに行追加するには?
-
エクセルVBA 画像を貼り付ける...
-
ArrayListのデバッグ方法について
-
Javaでブラウザ判定
-
String型からlong型への変換は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
VB.netでメソッドからコントロ...
-
JSPでのArrayListの表示につい...
-
VBAでの[]
-
javaで、、、
-
C#のクラスで値渡しをする
-
Excel VBA 定数にオブジェクト...
-
Dispose()は、どんな時に使うの...
-
Vba ListViewの行挿入に関して...
-
Javaでブラウザ判定
-
getParameter()について
-
VB.NETでのnothing の意義について
-
PrintFormを使用してのプリント
-
ピクチャーボックスに点を打つ...
-
String型からlong型への変換は...
-
drawStringの座標について
-
エクセルVBA/SpecialCellsで特...
-
GridViewに行追加するには?
おすすめ情報