ArrayListについて-ArrayListの勉強中

このQ&Aのポイント
  • ArrayListについて勉強しています。
  • ArrayListに自作クラスであるPersonを入れると、最後に入力した情報しか出力されません。
  • ロジックの中で、国語の平均点と各人の平均点を計算しています。
回答を見る
  • ベストアンサー

arraylistについて

arraylistの勉強をしています。 ここの掲示板他、いろいろなものを見たのですが、 解決できませんでした。 お時間ある方、是非教えてください。 ArrayListにPerson(自分で作ったクラス)を入れていきます。 そうすると、出力したときに、最後に入力したものしか、出力されません。 例えば、 何人分入力しますか?2 名前を入力してください:mori moriさんですね 国語の点数は?:2 数学の点数は?:2 英語の点数は?:2 名前を入力してください:sita itaさんですね 国語の点数は?:4 数学の点数は?:5 英語の点数は?:6 国語の平均は3点です。 数学の平均は3点です。 英語の平均は4点です。 sitaさんの平均点は5点です。 sitaさんの平均点は5点です。 という感じに最後に入力したものが人数分出力されます。 ロジックは下記のようになっています。 (全然意味のわからないものでしたらご指摘ください) ☆Syuukei.java☆  ~省略~     persondata.add(person);   }   System.out.println("国語の平均は" + (persondata..getKototal() / nin) + "点です。");  ~省略~ Iterator ite = persondata.iterator(); while(ite.hasNext()){   Person per = (Person)ite.next();   System.out.println(per.getName() + "さんの平均点は" + (per.getSubtotal() / 3) + "点です。"); ☆PersonData.java☆ import java.util.*; public class PersonData extends ArrayList{ ~省略~ public boolean add(Person person){ super.add(person); kototal += person.getKo(); sutotal += person.getSu(); eitotal += person.getEi(); return true; } public int getKototal(){ return kototal; } ~省略~ } Person.javaは、gettersetterです。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

省略して書いてないところが問題でしょう。たぶん。 こんな感じで書いてませんか? Person person; for(人数分ループ) {  /* ここで入力処理 */  person.setKo(国語の点);  person.setSu(数学の点);  person.setEi(英語の点);  persondata.add(person); } これだと同じ person を使いまわしてるのでダメです。 こんな風にしてみてください。 Person person = null; for(人数分ループ) {  person = new Person();  /* ここで入力処理 */  person.setKo(国語の点);  person.setSu(数学の点);  person.setEi(英語の点);  persondata.add(person); }

coroco
質問者

お礼

SpiralGalaxyさんありがとうございます。 ぴったりでました。 私の勉強不足ですね(>_<) ほんとうにありがとうございました!

coroco
質問者

補足

同じpersonを使いまわすと、 箱は一つだから、実際はその箱をみてるだけだから 、すべて最後に入力したものが出力される。 という考え方でよいでしょうか?

その他の回答 (1)

回答No.2

>箱は一つだから、実際はその箱をみてるだけだから >、すべて最後に入力したものが出力される。 >という考え方でよいでしょうか? はい。そういうことになります。 その都度 new して別の箱を作ってやる必要があると思います。 >ぴったりでました。 そうですか(^^)良かったです。

coroco
質問者

お礼

SpiralGalaxyさん!ほんとにありがとうございます。 私もここの質問に答えられるよう頑張ります! (まだしばらくは質問側でしょうが(^^ゞ) ありがとうございました~!!

関連するQ&A

  • 国語だけテストの点数が取れなくて困ってます。中3で

    僕は今回期末テストの点数が返されたのですが、理科が平均40で60点社会が平均71で94、数学が平均55で74.英語が平均50で62、国語が平均60の中僕は40です。どうしても国語だけ点数が伸びません。ちゃんと期末テストの範囲も勉強したのですが本当に国語だけ取れません。もうそろそろ受験ですが国語の点数をあまり取れる気がしません。どうすれば国語の点数を取れるでしようか

  • tiny basicでプログラム作成

    次の問題のプログラムをtiny basicで作成してみてくだい。 理科、数学、国語、音楽、体育の点数を読み込み、5科目の平均点を計算し、平均点が60点以上で合格、60点以下なら不合格と表示するプログラムをつくりなさい。 各科目の点数は、理科50点、数学80点、国語40点、音楽60点、体育64点とする。

  • C言語のプログラムについて質問です。

    C言語のプログラムについて伺いたいことがあるんですが5人くらいの名前、数学、英語、国語の点数を入力して各教科の最高点、最低点、平均点、それぞれの数+英+国の合計点を表示するプログラムを構造体を使って作りたいと思っています。 もしよろしければ事細かに教えていただけないでしょうか。 よろしくお願いします。

  • コーディングフローチャート

    下記のコーディングのフローチャートの書き方が分かりません。 どうか教えてください。 試験の成績データを読み込んで、ひとりの生徒分を取りまとめて生徒成績レコードとして出力します。 入力ファイルは学生番号順に並んでいます。 試験成績データは、1科目ごとに試験を受けた結果が入っています。 1.ファイルレイアウト ・入力ファイル  学生番号  X(004) 科目コード X(002) ※1 点数  9(003) ※2 ※1 科目コード 01:国語 02:数学 03:英語 04:科学 05:歴史 ※2 点数 0~100までの範囲 2.生徒成績データ ・出力ファイル  学生番号 X(004) 受験科目数 9(001)※1 最高点 9(003)※2 最低点 9(003)※3  平均点 9(003)※4  国語点数 9(003)※5  数学点数 9(003)※5  英語点数 9(003)※5 科学点数 9(003)※5 歴史点数 9(003)※5 ※1 試験成績データの同じ学生番号の人が受けた試験の数   国語、英語、歴史の試験を受けた場合は入力レコード数は   3レコードとなり受験科目数は3となる。 ※2 最高点   試験成績データの点数が一番良い点数 ※3 最低点   試験成績データの点数が一番悪い点数 ※4 平均点   試験を受けた点数の平均 ※5 各科目点数   試験成績データの科目コードより該当の科目へ点数を設定する

  • 中間テスト 中1 中1です。初テストがあり、3教科

    中間テスト 中1 中1です。初テストがあり、3教科テスト結果が返ってきました! 国語 平均…69点 自分…82点 英語 平均…75点 自分…88点 社会(地理) 平均…71点 自分…99点(クラストップ) まぁこんな感じなんですが…… どうですか? ちなみに僕の中学には353人1年生がいます。 この点数を計算すると………269点でした! この点数+あとは数学・理科は95点以上はあると思うので、 学年順位は何位ぐらいになると思いますか? みなさん、初めてのテストで予想もつきません。 どれぐらいになるか予想で構いませんので教えてください! ちなみに……… 友達のは……… A君………国語73 理科50 社会59 B君………国語34 英語55 数学37 C君………国語77 英語85 社会69 D君………国語62 英語70 社会83 E君………国語77 英語75 社会73 コイン100枚!!!です。 . この質問に補足する.

  • SQL文について(ANDとORの論理演算について)

    下記の質問についてご教授お願い致します [設問] 国語と数学の試験を実施し、2教科の成績は氏名とともに、得点表に記録されている。 1教科は平均点以上で、残りの1教科は平均点未満の生徒氏名を表から抽出するSQLはどれか。 A:国語の点数が国語の平均点以上 B:数学の点数が数学の平均点以上 とするときに、SQL文は SELECT 生徒氏名 FROM 得点 WHERE (A OR B) AND NOT (A AND B) となります。 このときに、 WHERE (A OR B) AND NOT (A AND B) ここの論理演算を理解することが難しいです。 論理演算を分解すると A OR B 国語または数学が平均点以上であるケース NOT (A AND B) 国語と数学の両方が平均点以上であるケース となり、この両者をANDで取ると 1教科は平均点以上で、残りの1教科は平均点未満になることになります。 この論理演算でどうしてもこのような結果を引き出すことができません。 お手数ですがご教授お願いいたします。

  • C++の配列についてなんですが

    #include <iostream> using namespace std; int main() { int i,goukei=0; int kokugo[5]; float heikin; for(i=0;i<5;i++) { cout << "出席番号" << i+1 << "番の国語の成績を入力してください\n"; cin >> kokugo[i]; goukei = goukei + kokugo[i]; } heikin = (float)goukei/5.0; cout << "平均点は" << heikin << "点です\n"; for(i=0;i<5;i++) { cout << "出席番号" << i+1 << "番の国語の成績は" << kokugo[i]; cout << "点で、平均との差は" << heikin-(float)kokugo[i] << "です\n"; } return 0; } これを基に 数学の点数も入力する 数学の平均も出力する 国語と数学の総合的な平均点も出力する ようにするにはどうすればいいんですか?

  • 教えてください12

    問題2 氏名と各教科(英数国)点数を記録可能なデータ構造を構造体を用いて作成し、 それぞれの氏名と点数を入力して表示させるプログラムを作成せよ。 <実行結果> 名前を入力してください(20文字以内英字) -->> chuo kansaiさんの英語の得点を入力してください(0-100) -->> 100 kansaiさんの数学の得点を入力してください(0-100) -->> 39 kansaiさんの国語の得点を入力してください(0-100) -->> 68 << kansaiさんの成績 >> 英語:100点 数学:39点 国語:68点

  • テストの点数や、内申点が伸びないのですが

    こんにちは。rozetと申します。 タイトルどおりの質問なのですが テストの点数や内申点がのびません。 テストは一教科60点満点の五教科 (国語数学理科社会英語)です。学力テストの点数は 国語41点 数学15点 理科43点 社会38点 英語38点の合計175点です。ランクはGの上段です。 今回の総合A(受験の参考にされるテスト)では 数学14点 英語36点 理科30点の最悪な点数です。 (国語社会はまだ返ってきていません)  僕が目指しているのは最低ランクGかFで 合格点数平均が140から156の工業高校の電気科です。 大して難しくはありませんが、このままではものすごく不安です。 いい勉強方法や参考書をご存知の方 この厨房に教えていただけないでしょうか。

  • VBAで平均点と偏差値を求めたい

    はじめて質問させていただきます。 課題1:国語、数学、理科、社会の50人分の点数が掲載してあります。このデータを用いて次の処理をするプロシージャを完成させなさい。国語、数学、理科、社会の50人分のデータの平均点、偏差値を画面上に表示する。 課題2:出席番号が変化するデータに対して、国語、数学、理科、社会の平均点、偏差値を画面上に表示する。 ちなみにデータは b2に出席番号 c2に国語 d2に数学 e2理科 f2社会と入力されてます。 次にb3~b52にNo.1~No.50の出席番号 c3~c52に国語の点数 d3~d52に数学の点数 e3~e52に理科の点数 f3 ~f52に社会の点数が入力されています。 点数は問題に関係ないと思うのでここでは書きません。 また、表示にはメッセージボックスを使うようです。 この2つの問題のプロシージャを教えていただきたいです。 できれば、プロシージャ1行ごとに簡単な解説も付けてもらえたら嬉しいです。 ちなみに課題1はここまで出来たんですが、課題2はまったくわかりません(汗 Sub 国語平均() Dim 平均 As Single Dim 偏差値 As Single Dim 標準偏差 As Single Dim 数量 As Integer 和 = Application.WorksheetFunction.Sum(Range("c3:c52")) 数量 = 0 Range("b3").Select Do Until ActiveCell.Offset(0, 1).Value = "" 数量 = 数量 + 1 ActiveCell.Offset(1, 0).Select Loop 平均 = 和 / 数量 標準偏差 = Application.WorksheetFunction.StDev(Range("c3:c52")) MsgBox 平均 MsgBox 偏差値 End Sub お手数をおかけしますがどうかよろしくお願いします。

専門家に質問してみよう