• 締切済み

Java初心者です。

Java初心者です。 現在あるJavaの問題を解いていて、つまづいてしまいました。 わかる方、ご教示お願いします。 以下問題 ****************************************************************** 以下2メソッドを持つShikenKekkaクラスを作成せよ ・学籍No,科目,点数を登録する void Toroku(String 学籍No , Kamoku 科目 , int 点数); ・引数で指定した学籍No,科目の点数を返す int getTensu(String 学籍No,Kamoku 科目); 科目は以下の定義 enum Kamoku{KOKUGO,SANSU,RIKA} 使用例として、 ShikenKekka sk = new ShikenKekka(); sk.Toroku("0A01",Kamoku.KOKUGO,70); sk.Toroku("0A01",Kamoku.SANSU ,60); sk.Toroku("0A01",Kamoku.RIKA ,50); sk.Toroku("0B02",Kamoku.KOKUGO,75); sk.Toroku("0B02",Kamoku.SANSU ,65); sk.Toroku("0B02",Kamoku.RIKA ,55); int point = sk.getTensu("0B02",Kamoku.RIKA); ****************************************************************** ArrayListを使って値を格納しようとしているのですが、 ArrayListの使い方がうまくできません。 学籍No,科目,点数の3つの値をどうすれば格納して保持できるのか、 教えていただけますでしょうか。 わかりずらい説明で申し訳ありません。

みんなの回答

回答No.4

enumクラスを使えばいいのかな? public enum kamoku { KOKUGO,SANSU,RIKA; } で kakunouのメッソドに kakunou(Kamoku k){ Kamoku kamoku = k; } 大雑把ですみませんw

全文を見る
すると、全ての回答が全文表示されます。
  • erudot
  • ベストアンサー率0% (0/1)
回答No.3

ご参考までに。 mintia007さんの回答でHashMapやHashTableが触れられていますが、これに加えMap系にはEnumMapという素敵なものがあります。 HashMapと組み合わせると便利かと思います。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/EnumMap.html
全文を見る
すると、全ての回答が全文表示されます。
  • mintia007
  • ベストアンサー率59% (16/27)
回答No.2

私ならArrayListではなく、キーと格納する値で管理しているHashMap又はHashtableを使いますね。 それで、学籍Noと科目と点数を格納するbeansを作り、学籍Noをキーにしてそのbeansオブジェクト を対の値として管理します。 ArrayListの場合、入れた順番が保証されるのでイテレータで取り出せば順番に管理できますが、 各要素が別管理されるのがマズイです。そこで学籍Noと科目と点数を格納するbeansを作り それで管理させます。それまでならOKなのですが、例えば0B02の算数だけ取得したといった場合、 難しくなりますよね。Map系を使えばキーで簡単に取得できます。 ご参考まで。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「学籍No,科目,点数の3つの値」を格納するクラスを作ればいいんじゃないか?

peachnyan
質問者

補足

回答ありがとうございます。 public class kakunou(String gakuseki,Subject kamoku,int tokuten){ String gakuseki2 = gakuseki; int tokuten2 = tokuten; } ここまでは出来たのですが、enumのKamokuの中身をどう記述すれば善いかわかりません。 もし、よろしければ教えて下さい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ArrayListについて教えてください

    ArrayListについて教えてください Java初心者です。 現在あるJavaの問題を解いていて、つまづいてしまいました。 わかる方、ご教示お願いします。 以下問題 ****************************************************************** 以下2メソッドを持つShikenKekkaクラスを作成せよ ・学籍No,科目,点数を登録する void Toroku(String 学籍No , Kamoku 科目 , int 点数); ・引数で指定した学籍No,科目の点数を返す int getTensu(String 学籍No,Kamoku 科目); 科目は以下の定義 enum Kamoku{KOKUGO,SANSU,RIKA} 使用例として、 ShikenKekka sk = new ShikenKekka(); sk.Toroku("0A01",Kamoku.KOKUGO,70); sk.Toroku("0A01",Kamoku.SANSU ,60); sk.Toroku("0A01",Kamoku.RIKA ,50); sk.Toroku("0B02",Kamoku.KOKUGO,75); sk.Toroku("0B02",Kamoku.SANSU ,65); sk.Toroku("0B02",Kamoku.RIKA ,55); int point = sk.getTensu("0B02",Kamoku.RIKA); ****************************************************************** ArrayListを使って値を格納しようとしているのですが、 ArrayListの使い方がうまくできません。 学籍No,科目,点数の3つの値をどうすれば格納して保持できるのか、 教えていただけると助かります わかりずらい説明で申し訳ありません。

  • フィールド数が異なるテーブル間の転記と、フィールド追加の順番

    Oracle10で似たようなテーブルAとBがあります。BからAに転記したいのですが、フィールドが正しく対応してインサートするか心配です。 AとBは現在Bの方のみrikaが多くあり、今回新たに一時テーブルBだけsyakaiテーブルを追加して、同じことをさせるのですが、 Aテーブルにkai namae kokugo sansuまで正しく入るかのかお聞きしたいです。 フィールド追加した場合の順番もどうなるか知りたいです。 テーブルA(メイン) kai namae kokugo sansu テーブルB(一時的) kai namae kokugo sansu rika (syakai) BからAへ転記するSQL文 insert into A select kai, namae, kokugo, sansu, rika, syakai where kai = 2;

  • C言語による構造体の値渡しについて

    以下プログラムを作成しました。 1.read_file関数によりファイルを読み込み。 2.avg_kokugo関数により、国語の平均点を出す。 という流れで組まれているのですが、 1.read_file関数実行時に、dat構造体を渡しています。 2.read_file関数内で、fscanfによる読み込みを行い、dat[i].name,&dat[i].kokugo,&dat[i].sansuに格納しているみたいに感じます。 ここで、疑問なのが、 「構造体を値渡しでdatをread_file関数に渡してる」と思っているのですが、 「read_file関数から、値渡しで渡された構造体datに、値を格納することはできるのでしょうか?」 本を参考にして勉強していたのですが、 「構造体は、値渡しの時に読み込みはできるが、更新はできない」 と書かれていたのです。(ポインタ参照渡しの時は可能。) なぜ今回、read_file関数から、構造体datに値の格納ができるのでしょうか? 更新と新規格納は意味が異なるからなのでしょうか? ご教授よろしくお願いします。 <ソース> #include <stdio.h> //グローバル #define FNAME "test.txt" struct score{ char name[20]; int kokugo; int sansu; }; int read_file(struct score dat[],int n); float avg_kokugo(struct score dat[],int n); int main(void){ struct score dat[3]; int ret; float kokugo; float sansu; ret= read_file(dat,3); if(ret <0){ return 0; } kokugo = avg_kokugo(dat,3); printf("国語の平均 %.1f\n",kokugo); return 0; } int read_file(struct score dat[],int n){ FILE *fp; //ファイルポインタ int i; fp=fopen(FNAME,"r"); if(fp==NULL){ printf("ファイルをオープンできませんでした。\n"); return -1; //-1によるプログラム強制終了 } //データ読み込み i=0; //datに保存していく。 while((fscanf(fp,"%s%d%d",dat[i].name,&dat[i].kokugo,&dat[i].sansu)) != EOF){ i=i+1; //ファイル件数読み込み } fclose(fp); return 0; } float avg_kokugo(struct score dat[],int n){ int sum; //合計 float answer; int i; sum=0; for(i=0;i<n;i++){ sum = sum + dat[i].kokugo; } //平均点を求める answer =(float)sum / (float)n; return answer; }

  • [Java]Javaの文法が間違っているのでしょうか・・・?

    6人分の小テストの点数を記録し,平均点,最高点,平均点以下の人の一覧を計算するプログラムを作成したいのです。 入力はコマンドラインから行います。 しかし,TEST配列がうまく初期化がうまく記述できないため,コンパイル時点で”シンボルが見つけられません”というエラーが出てしまいます。 Javaの経験が浅いので、文法そのものが間違っているか心配です。C言語についてはある程度知識がありますから、C言語と対比して教えて頂けたりすると大変たすかります。 宜しくお願い致します。 class Lecture { static Lecture[] TEST; static double avg=0; static int max=0; static int i = 0; static String kamoku; int scorebox; String name; String student_number; Lecture(int size){ TEST = new Lecture[size]; for (int i = 0; i < size; i++) { Exercise a = new Exercise(); Student b = new Student(); TEST[i] = new Lecture(a,b); } } static void add(Exercise score, Student aStudent) { TEST[i].name = aStudent.name; TEST[i].student_number = aStudent.student_number; TEST[i].scorebox = score.score; i++; } static void avg() { int sum=0; for (int i = 0; i < 6; i++) { sum += TEST[i].scorebox; } avg = sum / 6; } static void max() { int max = 0; int temp = 0; for (int i = 0; i < 6; i++) { if (max < TEST[i].scorebox) { temp = i; max = TEST[i].scorebox; } } max = i; } static void show_kamoku(){ System.out.println("科目:"+kamoku); } static void show(){ Lecture.max(); System.out.println("平均点:"+avg); System.out.println("最高得点者:"+TEST[max]); } static void under_avg(){ Lecture.avg(); System.out.println("平均点を下回った者"); for(int i=0 ; i<6 ; i++){ if(avg > TEST[i].scorebox){ System.out.println(TEST[i]); } } } } class Exercise { int score; Exercise(int score) { this.score = score; } Exercise() { } public String toString() { return " 得点:" + score; } } class Student { String name; String student_number; Student(String student_number,String name ) { this.name = name; this.student_number = student_number; } Student() { } public String toString() { return "学籍番号:" + student_number + " 名前:" + name; } } class ExerciseEvaluation { public static void main(String args[]){ Lecture.kamoku=args[0]; Lecture[] lec = new Lecture[6]; Student Y0 = new Student(args[1],args[2]); Exercise X0 = new Exercise(Integer.parseInt(args[3])); lec[0].add(X0, Y0); Student Y1 = new Student(args[4], args[5]); Exercise X1 = new Exercise(Integer.parseInt(args[6])); lec[1].add(X1, Y1); Student Y2 = new Student(args[7], args[8]); Exercise X2 = new Exercise(Integer.parseInt(args[9])); lec[2].add(X2, Y2); Student Y3 = new Student(args[10], args[11]); Exercise X3 = new Exercise(Integer.parseInt(args[12])); lec[3].add(X3, Y3); Student Y4 = new Student(args[13], args[14]); Exercise X4 = new Exercise(Integer.parseInt(args[15])); lec[4].add(X4, Y4); Student Y5 = new Student(args[16], args[17]); Exercise X5 = new Exercise(Integer.parseInt(args[18])); lec[5].add(X5, Y5); Lecture.show_kamoku(); Lecture.show(); Lecture.under_avg(); } }

  • 長文失礼致します。Java初心者の者です。

    MVCモデルに挑戦しているのですが、JSPの部分でエラーが出ます。 何か足りない気はするのですが、何を記述したら良いのか分かりません。 以下、一部抜粋です。 //JSP <%@ page contentType="text/html; charset=Windows-31J" %> <%@ page import="java.util.*"%> <%@ page import= "jp.co.xxx.bean.Jyusho" %> <jsp:useBean id="LIST" class="java.util.ArrayList" scope="request"/> //ここに何か記述しないといけない気がします。 <html><body> <TABLE BORDER="1"> <TR><TD><b>NO</b></TD><TD><b>名前</b></TD><TD><b>住所</b></TD><TD><b>電話番号</b></TD></TR> <TR> <TD><%=LIST.getNo() %></TD> <TD><%=LIST.getName()%></TD> <TD><%=LIST.getAddress()%></TD> </TR> </TABLE></body></html> //JyushoServlet public class JyushoServlet extends HttpServlet {  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{Jyusho jyusho = new Jyusho(); List list = Jyusho.list(); request.setAttribute("LIST", list);} catch(Exception e){ e.printStackTrace(); } finally{ ServletContext context = this.getServletContext(); RequestDispatcher dispatcher = context.getRequestDispatcher("/jyusho.jsp"); dispatcher.forward(request, response);} } } //JyushoBean public String getAddress() { return address;} public void setAddress(String address) { this.address = address;} public String getNo() { return no;} public void setNo(String no) { this.no = no;} public String getName() { return name;} public void setName(String name) { this.name = name;} //Jyusho List list = new ArrayList(); while(resultSet.next()){ JyushoBean bean = new JyushoBean(); bean.setNo(resultSet.getString("NO")); bean.setName(resultSet.getString("NAME")); bean.setAddress(resultSet.getString("ADDRESS")); list.add(bean);} return list;} public List list(String no)throws ClassNotFoundException, SQLException{ List list = new ArrayList(); Iterator it = list().iterator(); while(it.hasNext()){ JyushoBean bean = (JyushoBean)it.next(); if(bean.getNo().equals(no)){ list.add(bean);} }return list;} } お手数ですが、ご教授お願い致します。

    • ベストアンサー
    • Java
  • gets関数と構造体について

    名前を入力して、各教科の点数を入力したあと、それを表示するプログラムを作りました。 完成はしたのですが、分からないところがあるので質問させて頂きます。 #include <stdio.h> #include <string.h> typedef struct { char name[32]; int kokugo; int rika; } siken; int main() { siken tensu[5]; // = {"三村",80,45,"大竹",90,85,"松本",75,60,"狩野",100,100,"大江",95,90}; char name[32],point[16],end[6]; int i=0; do { printf("名前を入力してください。 : "); gets(tensu[i].name); //tensu[i].name = name; printf("国語 : "); gets(point); tensu[i].kokugo = atoi(point); printf("理科 : "); gets(point); tensu[i].rika = atoi(point); i++; printf("入力を終わりますか?(YES=0,NO=1) : "); gets(end); } while (atoi(end)); i=0; do { printf("氏名を入力して下さい。 : "); gets(name); while (strcmp(name,tensu[i].name)) i++; printf("氏名 : %s\n国語 : %d\n理科 : %d\n",tensu[i].name,tensu[i].kokugo,tensu[i].rika); printf("終わりますか?(YES=0,NO=1) : "); gets(end); if (atoi(end)==0) break; else if(atoi(end)!=1) { printf("入力に誤りがあります。もう一度入力して下さい。 : "); gets(end); continue; } } while (atoi(end)); return 0; } このプログラムの printf("名前を入力してください。 : "); gets(tensu[i].name); //tensu[i].name = name; printf("国語 : "); gets(point); tensu[i].kokugo = atoi(point); printf("理科 : "); gets(point); tensu[i].rika = atoi(point); i++; printf("入力を終わりますか?(YES=0,NO=1) : "); gets(end); の部分で、点数を入力するとき、 scanf("%d",tensu[i].kokugo); とすると、入力を終了するための入力が飛ばされ、いきなり表示に行きます。(入力を終わりますか?の表示のだけですぐデータ表示のための「氏名を入力してください」が表示される感じです。) また、この部分の最後のendをint型のj(初期化したものです)に置き換えると「入力を終わりますか?」の入力はできるのですがデータの表示がエラーでできなくなります。 この部分が分からず、もやもやが残っているので質問させていただきました。 長文で申し訳ないです。 回答よろしくお願いいたします。

  • 九九の表の応用

    Java勉強中の超初心者です。 ちょっと前に同じ質問をしたのですが、前回の回答をよく見たら 趣旨とは違った処理をしていたのでもう一度、質問をさせて下さい。 ArrayListを使った九九の表を作成します。 この時に、九九の計算結果を一旦、Stringの配列に格納してから、 ArrayListから値を出力します。 この時にArrayListに格納してから出力するソースは書くことが できたのですが、一旦、格段はString[]s = new String[9];として Stringの配列に格納してから、ArrayListにまとめて出力する方法 をご教授お願いできますか? ----------------------------------------------------------- ArrayList list = new ArrayList(); //ここにString[]s = new String[9];が入ります。 for(int i = 1; i <= 9; i++ ){ for(int j = 1; j <= 9; j++){ list.add(i*j); System.out.print(list.get(list.size() - 1) + " "); if((list.size() - 1) % 9 == 8 && (list.size() - 1) != 0){ System.out.println(""); } } } ---------------------------------------------------------- 上記のソースを元に作成できたらと、思います。

    • ベストアンサー
    • Java
  • C言語のプログラミングで、ある条件で並び変えるプログラミングが分かりません。

    以下のプログラミングができません。 どなたか分かる人はいませんか? 構造体studentを以下のように定義する。 struct student{ char name[20]; int kokugo, sansu, eigo;/* 各科目の点数を記録する変数 */ }; 10人分のデータが配列に記録されている。合格者の人数を表示し,合格者が先にくるように配列の中身を並べ替える。その後、配列の内容を表示させる。合格の条件は少なくとも2科目以上で80点以上をとっていることとする。 10人分のデータはmain文のはじめに配列に入れておく。

  • コンパイルエラーが解決できません

    Java初心者です。サンプルコードを実行しながら勉強しているのですが以下のプログラムを実行するとコンパイルエラーになってしまいます。 バージョンはJ2SE5.0です。 //列挙型サンプルプログラム public class Sample3_4 { public enum Dept {KOKUGO, SHAKAI, SANSU, RIKA} public static void main(String[] args) { System.out.println("-------- 特定要素の取り出し ----------"); Dept d1 = Dept.SANSU; System.out.println(d1); System.out.println("-------- 全要素の取り出し ----------"); Dept[] d = Dept.values(); for(int i = 0; i < d.length; i++); System.out.println(d[i]); //上記の3行は以下と置き換えることができる //for(Dept d: Dept.values()); //System.out.println(d); System.out.println("-------- switch 文での利用 ----------"); System.out.println("算数は" + course(Dept.SANSU)); } public static String coures(Dept d) { switch(d) { case KOKUGO: case SHAKAI: return "文系"; case SANSU: case RIKA: return "理系"; default: throw new AssertionError(d + "はありません"); } } } ・エラー内容 Sample3_4.java:13:シンボルを見つけられません。 シンボル:変数i 場所 :Sample3_4 の クラス System.out.println(d[i]); Sample3_4.java:20:シンボルを見つけられません。 シンボル:メソッド course(Sample3_4.Dept) 場所 :Sample3_4 の クラス System.out.println("算数は" + course(Dept.SANSU)) 環境変数などを調べてPathを追加してみたりしたのですが、うまくいきません。エラーの原因はどこにあると考えられるのでしょうか?

    • ベストアンサー
    • Java
  • ある関数のソースがわかりません。

    KOKUGO=100 SUUGAKU=80 RIKA=0 SYAKAI=60 というファイルを取得して数字だけ構造体に渡す関数のソースです。 define KOKUGO 3; define SUUGAKU 2; define RIKA 1; define SYAKAI 2; 構造体は typedef struct{ char koku[KOKUGO +1]; char suu[SUUGAKU +1]; char rika[RIKA + 1]; char sya[SYAKAI + 1]; }data; です。 全体ではデータを読み取ってcsv形式で出力するプログラムなんですが main関数、出力関数はちょっと省きます。 int Readfile(data *txtfile, char *ptxt) { FILE *fp; char *fullcode = NULL; char search = '='; char buff[30] = {'\0'}; int enum[4] = {'\0'}; int err = 0; char *rtxt = NULL; /*ファイルオープン*/   fp = fopen(ptxt, "r"); if(fp == NULL){ puts("オープンエラー"); return(1); } /*ファイル読み取り*/   while(1){ /*データを一行ずつ読み取り*/    rtxt = fgets(buff, sizeof(buff), fp); if(rtxt == NULL){ break; } /*データ名確認*/    if(strncmp(buff, "KOKUGO=", 7) == 0){ ••••••••••• (1) /*'='を含むデータ確認*/   fullcode = strchr(buff, search); /*'='より後ろの点数確認*/ fullcode += 1; /*点数桁数確認*/   if(strlen(fullcode) == KOKUGO + 1){ /*構造体に点数のみ格納*/     strncpy(txtstr -> koku, fullcode, KOKUGO); enum[0] += 1; }else{ puts("データが違います") return(1); } }else if(strncmp(buff, "SUUGAKU=", 8) == 0){   fullcode = strchr(buff, search); fullcode += 1;   if(strlen(fullcode) == SUUGAKU + 1){     strncpy(txtstr -> suu, fullcode, SUUGAKU); enum[1] += 1; }else{ puts("データが違います") return(1); } } else if(strncmp(buff, "RIKA=", 5) == 0){   fullcode = strchr(buff, search); fullcode += 1;   if(strlen(fullcode) == RIKA + 1){     strncpy(txtstr -> rika, fullcode, RIKA); enum[2] += 1; }else{ puts("データが違います") return(1); } } else if(strncmp(buff, "SYAKAI=", 7) == 0){   fullcode = strchr(buff, search); fullcode += 1;   if(strlen(fullcode) == SYAKAI + 1){     strncpy(txtstr -> sya, fullcode, SYAKAI); enum[3] += 1; }else{ puts("データが違います") return(1); } } } for(err = 0; err < 4; err ++){ if(enum[err] != 1){ puts("データが違います"); return(1); } } /*ファイルを閉じる*/   fclose(fp); return(0); } という風に書いてあるんですが(1)の部分で7文字比較して等しければ 次の/*'='を含むデータ確認*/に進むと思うんですが等しくなければ どういう処理が行われ、どこに進むのかわかりません。 基本的にこの無限ループの流れがわかりません。 このソースの読み方を教えてください。 友達が以前書いたソースなんですが聞いてももうわからないらしくて・・・。    すいませんが、勉強し始めたばかりなので詳しくお願いします。

このQ&Aのポイント
  • EPSON PX-105でカラー印刷ができなくなった場合、純正の新品カートリッジに交換しても白黒になる可能性があります。
  • Word文書のカラー設定やテストプリントも正常にカラー印刷ができない場合、印刷ヘッドやドライバーの問題が考えられます。
  • EPSON PX-105のカラー印刷トラブルを解決するためには、印刷ヘッドのクリーニングやドライバーの再インストールを試してみると良いでしょう。
回答を見る