• ベストアンサー

JAVAのことで質問があります。

Sampleというクラスがあり Sample sample1=new Sample(); Sample sample2=new Sample(); Sample sample3=new Sample(); Sample sample4=new Sample(); Sample sample5=new Sample(); という事をやるとき、もっと簡単にfor文などで書くことができないのですか?もしできるのなら教えてください。

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

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

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.3

あちゃー、配列オーバーしちゃいますね、これじゃ・笑 Sample[] sample=new Sample[5]; try{   ClassLoader loader=ClassLoader.getSystemClassLoader();   for(int i=0 ; i<sample.length ; i++){     Class clazz=loader.loadClass("Sample"+(i+1));     sample[i]=(Sample)clazz.newInstance();   } } catch(ClassNotFountException e){} catch(InstantiationException e){} catch(IllegalAccessException e){} 以上、訂正でした。

shuncillin
質問者

お礼

簡単じゃないですね。でも早速やってみたいと思います。ありがとうございました。

その他の回答 (2)

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

簡単かどうかは分かりませんが(笑)java.lang.ClassLoader を使えば出来ない事はないです。 条件としては Sample1~Sample* が Sample クラスの派生クラスである必要がありますけど、恐らくそういう意図で作成されているのでしょうから問題はないと思います。 Sample[] sample=new Sample[5]; try{   ClassLoader loader=ClassLoader.getSystemClassLoader();   for(int i=1 ; i<=sample.length ; i++ ){     Class clazz=loader.loadClass("Sample"+i);     sample[i]=(Sample)clazz.newInstance();   } } catch(ClassNotFountException e){} catch(InstantiationException e){} catch(IllegalAccessException e){}

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは Sample samle[] = new Sample[5]; for (i=0 ;i<5 ;i++){   Sample sample[i] = Sample(); } といったように配列にしてしまうのはまずいですか?

shuncillin
質問者

お礼

ありがとうございます。質問を間違ってしまってすみません。でも同じクラスの場合もよくあるので、そのときは、やってみます。

shuncillin
質問者

補足

すいません、質問が間違ってました。本当は Sample sample1=new Sample1(); Sample sample2=new Sample2(); Sample sample3=new Sample3(); Sample sample4=new Sample4(); Sample sample5=new Sample5(); のようにクラスも連番になっています。すいません。

関連するQ&A

  • JAVA Applet for文でのまわし方

    JAVA Appletでボタンを押すと色々反応するプログラムを作っています。for文を使わず長々としたプログラムだとコンパイルでき実行できますが、for文を使って簡潔にまとめる表記の仕方がどうもよくわかりません。 /* リスナの登録 */ bt[0].addActionListener(new testActionListener0()); bt[1].addActionListener(new testActionListener1()); bt[2].addActionListener(new testActionListener2()); bt[3].addActionListener(new testActionListener3()); bt[4].addActionListener(new testActionListener4()); bt[5].addActionListener(new testActionListener5()); bt[6].addActionListener(new testActionListener6()); bt[7].addActionListener(new testActionListener7()); bt[8].addActionListener(new testActionListener8()); 上記はfor文でまとめれると思うのですが、どのように表記すれば良いのかわかりません。 for文でくくって、 bt[i].addActionListener~~ とすればそれぞれbt[i]が反応するのはわかりますが、その後の、 ~~(new testActionListener○()); の○の部分にiを入れる場合の表記の仕方がわかりません。もしくはiを入れる事はできないのでしょうか? ※このあとそれぞれのtestActionListener(0~8)のリスナクラスが呼び出されます。 説明が足りないのであれば回答の後、補足しますm(_ _)m

    • ベストアンサー
    • Java
  • JavaのjTableに関する質問です

    以下の様にプログラムを書いた所、「jTable3が見つかりません」と出力されました。 for文をつける以前は何も問題なく動いていたいのに、どうしてfor文を付けたことによって、このようなエラーが起きたのでしょうか? private void jButton19MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: for(int i=0;i<10;i++) NewJFrame.jTable3.getColumnModel().getColumn(20).setCellRenderer(new MyTableCellRenderer()); } }

    • ベストアンサー
    • Java
  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • Javaのプログラムに関する質問です。

     以下のプログラムはコマンドライン引数で複数の数字を  受け取り、int型配列arrayに受け取った値を代入して  arrayの先頭から順番に表示しています。    変換クラスと、表示クラスを作成し  (1)の部分を変換クラスで、  (2)の部分を表示クラスで行うように修正してください。 */ class ClassAdd08{  public static void main(String[] args){   HenkanClass subA = new HenkanClass();//HenkanClassのインスタンス化   subA.henkan(len,array);//変換メソッドの呼び出し   HyoujiClass subB = new HyoujiClass();//HyoujiClassのインスタンス化   subB.hyouji();//表示メソッドの呼び出し  } }   //****************************     (1)     ********************************** class HenkanClass{//変換クラスを新規作成  public void henkan(){//変換メソッド   int len = args.length;   int[] array = new int[len];   for(int i = 0; i < len; i++){    array[i] = Integer.parseInt(args[i]);   }  } }    //****************************     (1)     **********************************    //****************************     (2)     ********************************** class HyoujiClass{//表示クラスを新規作成  public void hyouji(){//表示メソッド   System.out.println("受け取った引数:" + len + "個");      for(int i = 0; i < len; i++){    System.out.println((i + 1) + "個目の数:" + array[i]);   }  }   //****************************     (2)     ********************************** } クラスのインスタンス化と、対応するメソッドまでは作成したのですが、その後どうすればいいか分かりません。考え方やヒントなど、皆様の知恵をどうかお貸しください。お願い致します。

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

    /* * 引数、パラメータ、戻り値を使用して * SubTest19クラスでフィールド変数を使用しないよう、 * 修正して下さい。 * * * また、SubTest19クラスのput()で行っている出力はfor文を使用する事。 * */ class Test19 {   public static void main(String[] args) {   // SubTest19クラスのインスタンス化   SubTest19 st19 = new SubTest19();   // setメソッド呼び出し:戻り値&引数無し   st19.set();   // putメソッド呼び出し:戻り値&引数無し   st19.put();   } } // SubTest19クラス class SubTest19 {   public Test19data t19d[] = null;       // setメソッド    public void set(){     t19d = new Test19data[3];     t19d[0] = new Test19data();     t19d[1] = new Test19data();     t19d[2] = new Test19data();     t19d[0].px = "K-0963";     t19d[0].ct = 23;     t19d[1].px = "T-523363";     t19d[1].ct = 517;     t19d[2].px = "J-97553";     t19d[2].ct = 5;   }     // putメソッド   public void put(){      System.out.println(t19d[0].px);     System.out.println(t19d[0].ct);     System.out.println(t19d[1].px);     System.out.println(t19d[1].ct);     System.out.println(t19d[2].px);     System.out.println(t19d[2].ct);   } } class Test19data{   // フィールド変数の宣言:String,int    public String px;    public int ct;    public Test19data(){       px = "";      ct = 0;    } } このような問題なのですが、どうしても出来ずに手詰まり状態です。丸投げで非常に申し訳ないのですが、どなたか途中までコードを書いて頂けないでしょうか?よろしくお願い致します。

  • javaのシェルソートについて質問です

    //Sample482 import java.util.Random; class Sample482{ static int shellSort1(int[] x){ int n = x.length; int cnt = 0; for(int h = n/2;h > 0;h /= 2){ for(int i = h;i < n;i++){ int tmp = x[i]; int j; for(j = i;j > h-1 && x[j-h] > tmp;j -= h){ cnt++; x[j] = x[j-h]; } x[j] = tmp; } } return cnt; } public static void main(String[] args){ Random rand = new Random(); int n = 20000; int[] x = new int[n]; for(int i = 0;i < n;i++){ x[i] = rand.nextInt(1000000); } int cnt = shellSort1(x); System.out.println("昇順にソートしました。"); for(int i = 0;i < n;i++){ System.out.println("x[" + i + "]=" + x[i]); } System.out.println("要素の移動回数" + cnt); } } //Sample483 import java.util.Random; class Sample483{ static int shellSort2(int[] x){ int n = x.length; int cnt = 0; int h; for(h = 1;h < n/9;h = 3*h+1); for(;h > 0;h /= 3){ for(int i = h;i < n;i++){ int j; int tmp = x[i]; for(j = i-h;j >= 0 && x[j] > tmp;j -= h){ x[j+h] = x[j]; cnt++; } x[j+h] = tmp; } } return cnt; } public static void main(String[] args){ Random rand = new Random(); int n = 20000; int[] x = new int[n]; for(int i = 0;i < n;i++){ x[i] = rand.nextInt(1000000); } int cnt = shellSort2(x); System.out.println("昇順にソートしました。"); for(int i = 0;i < n;i++){ System.out.println("x[" + i + "]=" + x[i]); } System.out.println("要素の移動回数:" + cnt); } } 上記のSample482とSample483はどちらもシェルソートを扱ったコードです。 参考書やネットの情報によると、後者のSmple483のシェルソートの方がより高速にソート することができるらしいのですが、実際に実行してみると、要素の移動回数は Sample482よりSample483の方が多くなります。 要素の移動回数が多いということは、それだけソートに時間がかかると私は思うのですが、 何故、後者のシェルソートの方が高速に動くといえるのでしょうか?

  • Javaのガーベジコレクションについて

    class Sample{ Sample sm; } class SampleMain{ public static void main(String[] args){ Sample sm1 = new Sample(); Sample sm2 = new Sample(); sm1.sm = sm2; sm2.sm = sm1; sm1 = null; sm2 = null; } } このプログラムでガーベジコレクションの対象(実行される可能性がある)は何行目になりますか?

    • ベストアンサー
    • Java
  • Javaのソースについて質問です・・・

    Javaのソースについて質問です・・・ Javaで「JCheckbox」クラスを使い、選ばれたら、『「」が選ばれました。』とテキストが表示され、 チェックが解除されたら、『選ぶのをやめました。』と表示されるようにしたいのですが、 そのソースについて質問です。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class sample11 extends JApplet {   private JLabel lb;   private JPanel pn;   private JCheckBox ch1,ch2,tmp;   public void init()   {     //コンポーネントの作成     lb=new JLabel("選んでください");     pn=new JPanel();     ch1=new JCheckBox("A");     ch2=new JCheckBox("B");     //コンテナへの追加     pn.add(ch1);     pn.add(ch2);     add(lb,BorderLayout.NORTH);     add(pn,BorderLayout.SOUTH);     //リスナの登録     ch1.addItemListener(new SampleItemListener());     ch2.addItemListener(new SampleItemListener());   }   //リスナクラス   class SampleItemListener implements ItemListener   {      public void itemStateChanged(ItemEvent e)      {        if(e.getStateChange()==ItemEvent.SELECTED){          tmp=(JCheckbox) e.getSource();          lb.setText(tmp.getText()+"を選びました。");        } else if(e.getStateChange()==ItemEvent.DESELECTED) {          tmp=(JCheckbox) e.getSource();          lb.setText(tmp.getText()+"をやめました。");        }      }   } } ・なぜ、チェックボックスが表示されるわけでもないのにリスナクラス内で、  オブジェクトを作成しなければならないのか? ・(JCheckbox)とはJCheckboxのオブジェクトを作成するという記述を省略したものなのか? ・なぜ、「tmp」を介して「lb」にテキストをセットしなければならないのか? 上の三つの点が分りません。 説明お願いしますorz .

    • ベストアンサー
    • Java
  • Javaのガーベジコレクションについて。

    javaのガーベジコレクションの対象となるタイミングがわからないので教えて下さい。 class Sample{ Sample gc; } class SampleMain{ public static void main(String[] args){ Sample gc1 = new Sample(); Sample gc2 = new Saample(); gc1.gc = gc2; gc2.gc = gc1; gc1 = null; gc2 = null; } }

    • ベストアンサー
    • Java
  • javaの覚え方

    私はjavaの勉強をしている初心者ですが、困っていることがあります。 数冊のjavaの本を読んで、オブジェクト指向のことや、基本的な事 は理解したつもりですが、自分でプログラムを作成する際、 用意されているクラスだけを使い終わってしまうのです。 これは、本のサンプルをうちこんでいるだけなのです。 一からつくろうとしても、実際サンプルプログラムの ようになるのだからと思ってしまうのですが、どうすれば 自分で作ったと実感できるのでしょうか?

専門家に質問してみよう