• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Iteratorパターンの亊で、質問します。)

Iteratorパターンの修正方法

このQ&Aのポイント
  • 質問者はIteratorパターンを学習中であり、Mainクラスを実行しても何も表示されない問題が発生している。
  • 質問者はStudentListクラスのaddメソッドに問題があると考えている。
  • 質問者は他の方法を探しているが具体的な方法がわからない。また、Iteratorパターンを使ってDB接続を汎用的にする方法についても質問している。

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

  • ベストアンサー
  • hoge_piyo
  • ベストアンサー率57% (15/26)
回答No.5

nullチェックは、場合によるので難しいです。 そこら中全部にnullチェックをいれてもコードが読みづらくなりますし。 クラスを使う側がある程度限定されていてわかってるなら、クラスを使う側を含めてテストをちゃんと実施すれば、実際のコードにnullチェックを残す必要はないと思いますし。 nullチェックというか、範囲チェックも含めてStudentクラスのコンストラクタとかは、必要だと思います。nullや、不正な値を渡しても、その時にはエラーが起こらない場合です。(オブジェクトが本来なってはいけない不正な状態にもかかわらず、その時点ではエラーが起きない場合) 後で取り出す場合になってエラーになるとわかりづらいバグになるので。

kannitiha
質問者

お礼

解答ありがとうございます。 でしたら、nullに関して、ソースをまた作り変えてから新たに質問させてもらいます。 また、よろしくお願いします。 ながなが、とありがとうございました。

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

その他の回答 (4)

  • hoge_piyo
  • ベストアンサー率57% (15/26)
回答No.4

すいません、前の回答で一箇所間違えました。 public static int MAN = 0; public static int WOMAN = 1; ではなく public static final int MAN = 0; public static final int WOMAN = 1; です。

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

>この場合、性別は最終的にString型にした方がいいのでしょうか? 場合によりますが、メソッドから返すときも、特に理由がなければString型で返す必要はないと思います。もしも、文字としてわかりやすい形で取り出す必要がある場合は、enumの中でtoStringをオーバーライドしておくか、Studentクラスを使う側で変換すればいいですから。 あと、enumでSexを宣言したなら、引数の型をSexにしないとまったく意味が無いです。enumを使用した場合以下のようになります↓ public class Student{ private final String name; private final Sex sex; public Student(String name,Sex sex){ this.name = name; this.sex = sex; } public String getName(){ return name; } public Sex getSex(){ return sex; } } public enum Sex{MAN,WOMAN} あと、intで定数にする場合は、private static finalではなく、public static finalです。privateで は引数で渡せないので意味がありません。たとえばStudentクラスの中で public static int MAN = 0; public static int WOMAN = 1; としておいて、Studentクラスを使う側は new Student("たろう",Student.MAN); というようにして使います。 キャストしてる箇所 ((Aggregate)studentLists).iterator(); とか System.out.println(((Student)itr.next()).getName()); とか

kannitiha
質問者

補足

解答ありがとうございます。 大変、助かりました。 エラーチェックを行う場合ですが、 この時のチェックが抜けているというのは、 if(studentLists !=null){} とかといった処理なのでしょうか? よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • hoge_piyo
  • ベストアンサー率57% (15/26)
回答No.2

省略している部分 一番ひどいのは性別がintで、1か2でそのまま数値で渡しているところでしょうか。明らかにenumにするべきです。 (enumがない古いVersionの時に書かれたものだとしても、せめてpublic static finalで定数としてMANとWOMANを定義しておいて、それを使用するようにするべき。また1か2以外も渡せるようになっていて、チェックしてない) あとはsetterメソッドのnullチェックとか、ジェネリックとか(ジェネリック使ってないからキャストしなければならなくなってる。そして、キャストに失敗した場合のエラー処理も無い) 配列のindexの範囲外にアクセスしてしまう可能性がある。 などでしょうか。 ただ、あくまでも実用的な観点から見た場合ですので、デザインパターンの説明のサンプルとしては、悪くはないとは思います。こういう短いサンプルではそういった(エラー処理などの)省略などはよくあることなので、そういった点を一応気に留めておいて読んだほうがいいです。

kannitiha
質問者

補足

解答ありがとうございます。 >明らかにenumにするべきです。。。。 この場合、性別は最終的にString型にした方がいいのでしょうか? 直してみました。 public class Student { private String name; private String sex; private static final int MAN = 1; private static final int WOMAN = 2; public Student(String name, int sex) { this.name = name; //性別 //enumを使う場合 if(sex == 1 ) { this.sex = Sex.MAN.name(); } else if(sex == 2) { this.sex = Sex.WOMAN.name(); } //final定数を使う場合 if(sex == MAN) { this.sex = "MAN"; } else if(sex == WOMAN) { this.sex = "WOMAN"; } } public String getName() { return this.name; } public String getSex() { return this.sex; } } public enum Sex { MAN, WOMAN } > あとはsetterメソッドのnullチェックとか、ジェネリックとか(ジェネリック使ってないからキャストしなければならなくなってる。 そして、キャストに失敗した場合のエラー処理も無い)。。。。 これは、どのクラスの亊なのでしょうか? よろしくお願いします。

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

それで、直してみました。 おそらく、原因は、StudentListクラスのaddメソッドだと思ったのですが、 直したところはあってます。他にもスペルミスがあるし、これを書いた人は実際に実行してないみたいですね・・・ この場合、もっとも汎用性があるソースとはどんなのなのでしょうか? 普通はStudentクラスだけ作って、あとはJavaのクラスを利用するだけで、他のクラスはつくりません。この例だと、それ以外のクラスをつくっても(少なくとも今の機能では)汎用性がなく、殆ど無駄です。 Iteratorパターン自体が、もっと綺麗に実用的に(ジェネリックなども使って)すでにJavaで実装されているので。 あくまでも、Iteratorパターン自体を説明するために、必要最低限のクラスとメソッドを実装したサンプルと思った方がいいです。実用の観点から見ると色々やらなければいけないことを省略している部分が多いです。

kannitiha
質問者

補足

解答ありがとうございます。 >実用の観点から見ると色々やらなければいけないことを省略している部分が多いです。 例えば、どういった部分なのでしょうか? よろしくお願いします。

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

関連するQ&A

  • IteratorとConcurrentModificationException

    IteratorにConcurrentModificationExceptionをthrowさせるやり方がわかりません。 配列に数字を挿入、削除するクラスをつくりました。 MyArrayにあるメソッド、変数 int [] array int mod // 挿入、削除の合計回数 初期値は0 add(int n) // nをarrayに挿入します delete() // 一番うしろの数字を削除します getMod() // modを返します iterator() // new ArrayIterator (array.length, mod) を返します。 modはadd()とdelete()が呼ばれるたびに1ずつ増えていくようにしています。ArrayIteratorはIteratorをimplementsしたクラスです。 <メインメソッドのコード> MyArray a = new MyArray (10); // サイズが10の配列をつくります a.add(1); a.add(2); a.add(3); a.add(4); Iterator it = a.iterator(); it.next(); // 配列の一番最初の数字を返します。 (i.e. 1) a.add(5); // 5を配列に挿入します。 // Iterator以外のメソッドで配列を変えてしまったので、 // ConcurrentModificationExceptionをthrowさせたいんです。 it.next(); // ここでConcurrentModificationExceptionをthrowしてくれません add()、 delete()、 getMod()はそのままにして全く変えずに、これができる方法ありますか?(その三つのメソッド以外は書きかえれます)it.next()だけでなく、it.hasNext()、it.remove()でも同じようにConcurrentModificationExceptionがthrowされるようにしたいのですが・・・。

  • Iteratorの使い方でこまっています。

    こんにちは、片岡と言います。 Iteratorの使い方で困っています。 次のプログラムで自分の望んだ結果と違う動作をします。 原因やもっと良い方法をご存知の方はいませんか。 私の行った手順は以下です。 (1)次のようなプログラムを作りました。 import java.util.ArrayList; import java.util.Iterator; public class Main { ArrayList list; public static void main(String[] args) { Main instance = new Main(); Iterator it = instance.getIterator(); for (int i = 0; i < 3; i++) { Iterator temp = it; //Iterator temp = instance.getIterator(); while (temp.hasNext()) { System.out.print(temp.next()); } System.out.println(""); } } public Main() { list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); } public Iterator getIterator() { return list.iterator(); } } (2)このプログラムを実行しました。 abc (3)しかし、私の望んだ実行結果は、次のようなものでした。 abc abc abc (4)プログラムを次のように変更しました。 Iterator temp = it; の行を Iterator temp = instance.getIterator(); に変更しました。 変更後は、私の望んだ実行結果になります。 なぜ、Iterator temp = it では駄目なのでしょうか。 また、何度もIteratorを生成すると、処理が重くなる気がします。 もっと良い方法はないのでしょうか。 ご存知の方はいらっしゃいませんか。 なお、私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 開発環境:Eclipse 3.2.2 java: java version "1.4.2_13"

    • ベストアンサー
    • Java
  • Vectorを用いた問題

    JAVAをはじめたばかりなのですが、以下の問題が分かりません。 Lessonクラス内のaddメソッドにおいてaddした結果が常に学籍番号の小さい順にソートしたいのですが、どうもVectorの使い方がわからず四苦八苦しております。 import java.util.Vector; class main { public static void main(String argv[]){ Lesson l = new Lesson("Kokugo","Tanaka",100); l.add(new Student("00005","Suzuki",100)); l.add(new Student("00002","Sato",64)); l.add(new Student("00003","Ito",43)); l.add(new Student("00007","Endo",92)); l.print(); } } class Lesson { private String name; // 課題名 private String teacher; // 担当者 private int max; // 最大履修者数 private int num; // 登録履修者数 Vector<Student> st; // Student class の配列 public Lesson(String l,String t,int n){ name=l; teacher=t; max=n; num=0; st=new Vector<Student>();// 配列の確保 } public boolean add(Student s){ if(num>=max){ return false;} else { if(num==0){st.insertElementAt(s,num++);} else{ for(int i=0;i<num;i++){ String p=(st.elementAt(i)).id; if(p.compareTo(s.id)>=0){ st.insertElementAt(s,i); } } } return true;} } public void print() { System.out.println("Lesson :"+name); System.out.println("Teacher :"+teacher); System.out.println("students:"+num); for(int i=0;i<num;i++){ st.elementAt(i).print_short(); } System.out.println(); System.out.println("----------"); } } class Student{ public String id; // 学籍番号 private String name; // 名前 private int grade; // 成績 Student(String i,String n, int g){ id=i; name=n; if(g<0)grade=0; else if (g>100) grade=100; else grade=g; } public void print_short() { System.out.println(id+","+name+","+grade); } } 実行結果 Lesson :Kokugo Teacher :Tanaka students:1 00002,Sato,64 ---------- 学籍番号の順にソートしたいのですが、どうやら学籍番号の一番小さいものしか表示されていないようです。どのようにしたらよいのか教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • Iteratorの使用について

    いつもお世話になっています。 List使用時の、iterator方法について質問します。 Listに、以下の情報が入っている場合で、 UserFormBean userFormBean = new UserFormBean(); List array = new ArrayList(); array.add("ほのか"); array.add("なぎさ"); array.add("桃子"); array.add("雛菊"); array.add("百合"); array.add("陽介"); //ListにListを格納する List array2 = new ArrayList(); array2.add("酒蔵"); array.add(array2); //別クラスのデータをListに格納する userFormBean.setUserName("あかね"); userFormBean.setAge(15); /** UserFormBeanクラス **/ public class UserFormBean { private String userName; private int age; public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } このとき、文字列で入っている場合は、普通に取得できるが、 List毎入っている場合と別クラスが入っているうまく取得できません。 普通にfor()を使用すれば取得できるのですが、 このときiteratorを使用して取得することは可能なのでしょうか? また、一般的にこのような取得方法の場合、forとどちらを使用するべきなのでしょうか? 取得方法は以下です。 for(Iterator a = array.iterator(); a.hasNext();) { System.out.println("a="+a); System.out.println("value="+a.next() ); //このとき、a.next()から再度UserFormBeanクラスデータを取得したい } ◆取得結果 a=java.util.AbstractList$Itr@10b30a7 value=ほのか a=java.util.AbstractList$Itr@10b30a7 value=なぎさ a=java.util.AbstractList$Itr@10b30a7 value=桃子 a=java.util.AbstractList$Itr@10b30a7 value=雛菊 a=java.util.AbstractList$Itr@10b30a7 value=百合 a=java.util.AbstractList$Itr@10b30a7 value=陽介 a=java.util.AbstractList$Itr@10b30a7 value=[酒蔵] a=java.util.AbstractList$Itr@10b30a7 value=UserFormBean@1a758cb 宜しくお願いします。

    • ベストアンサー
    • Java
  • Javaのプログラムの質問です。

    Javaのプログラムについての質問です。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。  注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中に番号を振ってあります。 import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.List; class LocalList implements List{  private int Count;  private String Data[];  private Iterator ite;  private ListIterator lite;  // コンストラクタ  void mylist(){   Data = new String[10];   Count = 0;  }  (1)  public boolean add(Object str){   if(Count >= 10){    return false;   }   Data[Count ++] = new String((String)str);   return true;  }  public void add(int i,Object str){  }        public boolean addAll(Collection c){   return false;  }        public boolean addAll(int i,Collection c){   return false;  }    (2)  public void clear(){   Count = 0;  }  public boolean contains(Object str){   return false;  }          public boolean containsAll(Collection c){   return false;  }  public boolean equals(Object str){   return false;  }    (3)  public Object get(int i){   return (i >= Count);  }  public int hashCode(){   return -1;  }  public int indexOf(Object str){   return -1;  }  public boolean isEmpty(){   return false;  }  public Iterator iterator(){   return ite;  }     public int lastIndexOf(Object str){   return -1;  }     public ListIterator listIterator(){   return lite;  }     public ListIterator listIterator(int i){   return lite;  }    (4)  public Object remove(int i){   return (i >= Count);  }    public boolean remove(Object str){   return true;  }         public boolean removeAll(Collection c){   return false;  }         public boolean retainAll(Collection c){   return false;  }    (5)  public Object set(int i,Object str){   return Data[i];  }    (6)  public int size(){   return Count;  }  public List subList(int i,int j){   return this;  }  public Object[] toArray(){   return Data;  }  public Object[] toArray(Object[] a){   return Data;  } } class Main {  public static void main(String[] args) {   mylist sub = new mylist();   sub.add("ビルドバーニングガンダム");   sub.add("ライトニングガンダム");   sub.add("ウイニングガンダム");   sub.add("ガンダムフェニーチェリナーシタ");   sub.add("R・ギャギャ");   for(int i = 0; i < sub.size(); i++){      System.out.println(sub.get(i));   }   // 改行   System.out.println();   // setメソッド   sub.set(1,"ガンダムエピオン");   for(int i = 0; i < sub.size(); i++){    System.out.println(sub.get(i));   }   // 改行   System.out.println();   // sizeメソッド   System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n");   // removeメソッド   sub.remove(1);   for(int i = 0; i < sub.size(); i++){       System.out.println(sub.get(i));   }   // clearメソッド   sub.clear();   System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです");    } } setメソッドとremoveメソッド以外は起動するのようになったのですが、この2つがうんともすんとも動きません。ジェネリクス型を使うという考え方もあるらしいのですが、ネットで調べてもピンと来ず寸詰まり状態になってしまっています。後少しだと思うのですが。。。。 どなたかご教授頂けないでしょうか?よろしくお願い致します。

  • ファイル操作やポインタ、構造体について(C言語)

    C言語の課題で詰まってしまいました。宜しければ助言を宜しくお願いします。 コマンド選択で,0) 終了,1) 追加,2) 検索(id),3)変更 が行える学生成績管理プログラムを作成する。 データは,学生の番号 名前 GP 総単位数 形で学生のデータを持っているファイルである。 #include<stdio.h> #include<stdlib.h> #include<string.h> struct student{ int id; char name[25]; int gp; int credit; }; void add(char *, struct student);//追加 int search(char *, struct student *);//検索 void change(char *, struct student);//指定したidの学生の情報を変更 main(int argc,char *argv[]) { FILE *fp; int i = 0; int num; struct student students; if(argc == 1){ printf("set filename\n"); return 1; } while(1) { printf("1)add 2)search 0)quit "); scanf("%d",&num); if(num == 0) break; /* 追加 */ if(num == 1) { printf("id name gp credit ? "); scanf("%d %s %d %d", &students.id, students.name, &students.gp, &students.credit); add(argv[1], students); } /* 検索 */ if(num == 2) { printf("id ? "); scanf("%d", &students.id); if(search(argv[1],&students)){ printf("%d %s %d %d\n", students.id, students.name, students.gp, students.credit); } else{ printf("ID %d Not Found.\n",students.id); } } if(num == 3){ //変更 } } } /* 追加ルーチン */ void add(char *filename, struct student students) { FILE *fp; if((fp = fopen(filename, "a")) == NULL){ printf("can't open %s\n", filename); exit(1); } fprintf(fp,"%d %s %d %d\n", students.id, students.name, students.gp, students.credit); fclose(fp); } /* 検索ルーチン */ int search(char *filename, struct student *students) { FILE *fp; int id; char name[25]; int gp; int credit; if((fp = fopen(filename, "r")) == NULL){ printf("can't open %s\n", filename); exit(1); } while(fscanf(fp,"%d %s %d %d", &id, name, &gp, &credit) != EOF) { if(id == students->id){ students->id = id; strcpy(students->name ,name); students->gp = gp; students->credit = credit; return 1; } } return 0; fclose(fp); } /* 変更ルーチン */ void add(char *filename, struct student students){ } ------------ここまで------------ ファイルの操作での入出力は"a"や"r"、また"w"を利用するのかとも思いましたが、 指定したIDの内容を書き換えるにはポインタを2つ使う方法しか思いつかないのですが、与えられた問題で、変更のプロトタイプは void change(char *, struct student); となっていて、どうやるのかまったく見当もつきません。 稚拙な文で伝わりにくいかもしれませんが、 変更のやり方についてご教授願います。 見難くて申し訳ありません。 どうか宜しくお願いします。

  • 複素数の計算するクラスを足せる人がもしいたら

    このJavaプログラムはAdd(足し算)とSud(引き算)を計算するプログラムです。 import Java.io.*; class INT { public int Add(int x,int y){ return x+y; } public int Sub(int x,int y){ return x-y; } } class REAL extends INT { public double Add( double x,double y){ return x+y; } public double Sub( double x,double y){ return x-y; } } class CAL extends REAL { } … public class Cale { public static void main(String args[]) { CAL c = new CAL(); System.out.println( c.Add(1,2) ); System.out.println( c.Add(1.0,2.0)); System.out.println( c.Sub( 1,2)); System.out.println( c.Sub( 1.0,2.0)); } } このプログラムに「複素数の足し算と引き算をするクラス」をクラスの仕様も併せて 作成することが出来る人がもしいたら宜しくおねがいします☆

  • javaのプログラミングについての質問です。

    Javaのプログラムについての質問です。長くなってしまいますがご容赦下さい。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。以下が現在までに作成したコードになります。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中にコメントを振ってあります。 import java.util.List; import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; class Mylist implements List{   private int Count;   private String Data[];   // コンストラクタ   public Mylist(){    Data = new String[10];    Count = 0;   } /** 実装するaddメソッド @return boolean APIの設定に従う @param e エレメント(要素) **/   public boolean add(E e){    Data[Count] = (String)e;   Count++;   return true;   }   public void add(int i,Object str){   }   public boolean addAll(Collection c){     return false;   }   public boolean addAll(int i,Collection c){     return false;   } /** 実装するclearメソッド **/   public void clear(){     Count = 0;   }   public boolean contains(Object str){     return false;   }   public boolean containsAll(Collection c){     return false;   }   public boolean equals(Object str){     return false;   } /** 実装するgetメソッド @return E エレメント(要素) @param i 指定されたインデックス番号 **/   public E get(int i){      /*     エレメントeに、String型Data[i]を     キャストして格納*/     E e = (E)Data[i];     return e;   }   public int hashCode(){     return -1;   }   public int indexOf(Object str){     return -1;   }   public boolean isEmpty(){     return false;   }   public Iterator iterator(){     return null;   }   public int lastIndexOf(Object str){     return -1;   }   public ListIterator listIterator(){     return null;   }   public ListIterator listIterator(int i){     return null;   }    /**   * 実装するremoveメソッド   * @return E エレメント(要素)   * @param index 指定されたインデックス番号   **/   public E remove(int index){ /* Dataを最大まで回し、iをインクリメントしたData[i++]を String型Dataに格納する*/ for(int i = index; i < Data.length; i++){ Data[i] = Data[index++]; } Count--; E e = (E)Data; return e; } public boolean remove(Object str){ return false; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } /** * 実装するsetメソッド * @return E エレメント(要素) * @param i 指定されたインデックス番号 * @param element 置き換える要素 **/ public E set(int i,E element){ // String型Dataにelementをキャストして格納 Data[i] = (String)element; // エレメントeにData[i]をキャストして格納 E e = (E)Data[i]; // 値を返す return e; } /** * 実装するsizeメソッド * @return int 指定されたインデックス番号 **/ public int size(){ return Count; } public List subList(int i,int j){ return this; } public Object[] toArray(){ return Data; } public Object[] toArray(Object[] a){ return Data; } } class Main { /** メインメソッド **/ public static void main(String args[]) { Mylist sub = new Mylist(); /* addメソッドを実装し、機体名を要素とする。 addを最大まで回し、getメソッドで要素を取り出して表示する*/ sub.add("ビルドバーニングガンダム"); sub.add("ライトニングガンダム"); sub.add("ウイニングガンダム"); sub.add("ガンダムフェニーチェリナーシタ"); sub.add("R・ギャギャ"); sub.add("ユニコーンガンダム"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // setメソッド sub.set(0,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // removeメソッド sub.remove(1); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // clearメソッド sub.clear(); System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです"); } } コンパイルして実行すると、removeメソッドで指定した箇所ではなく、要素の1番最後が削除されています。思うに、removeメソッドを実装する所のfor(int i = index; i < Data.length; i++){の中の条件が違うと思うのですが。。。。 また、現在addには10個箱を作成するようにしていますが、11個目をメインクラス内で用意した場合、例外ではなく新たに箱を作らなければならない、という後だしジャンケン的な事を言われて、思わず「じゃあArrayListでいいじゃないか」と思ってしまいました。 気を取り直してこの3連休で終わらせたいと思っています。ここまでで現状コードの完成は50%かそれ以下だとは思いますが、どなたか上記2点について御教授頂けないでしょうか。よろしくお願い致します。

  • java 戻り値についての質問です。

     戻り値を使ったプログラムを作成したところエラーが出たのですが、どこを修正しなければならないのかわかりません。 [プログラム] public class Main31{ public static int add(int x, int y){ int ans = x + y; return ans; } public static void main(String[] args){ int ans = add(100 , 10); System.out.println(x +"+"+y+"="+ans); } } [エラーの内容] Main31.java:12: エラー: シンボルを見つけられません System.out.println(x +"+"+y+"="+ans);     ^ シンボル: 変数 x 場所: クラス Main31 Main31.java:12: エラー: シンボルを見つけられません System.out.println(x +"+"+y+"="+ans);      ^ シンボル: 変数 y 場所: クラス Main31 エラー2個 どこを直せば良いのかと、このプログラムだとエラーが出てしまう理由を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Listデータを重復せずにSetに格納したい

    お世話になっています。 以下のクラスがあるとき public class UserFormBean_2 { private int userNum; private String userId; private String password; public void setUserNum(int userNum) { this.userNum = userNum; } public int getUserNum() { return this.userNum; } public void setUserId(String userId) { this.userId = userId; } public String getUserId() { return this.userId; } public void setPassowd(String password) { this.password = password; } public String getPassword() { return this.password; } public String toString() { return this.userId; } } Listにこのクラスが格納されている場合、 userIdをキーに、userIdを重複せずに格納することは可能なのでしょうか? 実行ソースは以下です。 public class Run{ public static void main(String[] args){ Set ss = new HashSet(); List array2 = new ArrayList(); (データ1) UserFormBean_2 userFr = new UserFormBean_2(); userFr.setUserId("maki"); userFr.setPassowd("なつのおとしご"); array2.add(userFr); //仮に、先にSetに値を格納する ss.add(userFr); (データ2) userFr = new UserFormBean_2(); userFr.setUserId("sayaka"); userFr.setPassowd("motomiti"); array2.add(userFr); (データ3) userFr = new UserFormBean_2(); userFr.setUserId("neneko"); userFr.setPassowd("ゆずは!"); array2.add(userFr); (データ4) userFr = new UserFormBean_2(); userFr.setUserId("森の山手"); userFr.setPassowd("なつのおとしご"); array2.add(userFr); //仮にSetに値を格納する ss.add(userFr); (データ5) userFr = new UserFormBean_2(); userFr.setUserId("maki"); userFr.setPassowd("なつのおとしご"); array2.add(userFr); System.out.println("size:"+array2.size()); System.out.println("set_size:"+ss.size()); UserFormBean_2 uB = new UserFormBean_2(); UserFormBean_2 uf = new UserFormBean_2(); System.out.println(" -- set -- "); } } よろしくお願いします。 for( Iterator u=array2.iterator();u.hasNext(); ) { uB = (UserFormBean_2)u.next(); System.out.println(uB.getUserId()); for(Iterator s=ss.iterator();s.hasNext(); ) { uf = (UserFormBean_2)s.next(); System.out.println(uf.getUserId()); ss.add(uB); }

    • ベストアンサー
    • Java
圧力制御について
このQ&Aのポイント
  • 集塵機の圧力制御について、初心者向けの始め方を教えてください。
  • 圧力制御をするためには、どのような手順が必要なのか教えてください。
  • 圧力制御のための注意点やポイントについて教えてください。
回答を見る