2017-10-15 8 views
0
package sms; 
import java.io.*; 
import java.util.*; 
public class Student { 
    PrintStream p=new PrintStream(System.out); 
    Scanner sc = new Scanner(System.in); 
    String reg; 
    Student(){ 
     //p.println("Enter the name of the student:"); 
    } 
    public void nstd() throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     ArrayList<String> cse=new ArrayList<String>(); 
     ArrayList<String> ece=new ArrayList<String>(); 
     ArrayList<String> mec=new ArrayList<String>(); 
     ArrayList<String> eee=new ArrayList<String>(); 
     p.println("Enter the name of the student:"); 
     String name=br.readLine(); 
     p.println("Choose one group from fallowing:"); 
     String group=br.readLine(); 
     if(group=="cse"||group=="CSE"){ 
      cse.add(name); 
      Acad name=new Acad(); 
     } 
     if(group=="ece"||group=="ECE"){ 
      ece.add(name); 
     } 
     if(group=="MEC"||group=="mec"){ 
      mec.add(name); 
     } 
     if(group=="eee"||group=="EEE"){ 
      eee.add(name); 
      } 
    } 
} 

上記のコードでは、名前を指定してcse arraylistに要素を追加した後、名前の付いたオブジェクトを作成しようとしましたが、重複する変数が見つかりました。 どのようにして、要素索引(たとえば、cse0、cse1など)に従属する名前または配列名を持つことができる、すべての学生エントリに対して一意の名前を持つオブジェクトを作成できますか。利用可能なデータを使用してJavaでオブジェクト名を自動生成する方法は?

答えて

0

変数名をJavaで動的に宣言することはできません。変数名はコンパイル時のものです。ただし、宣言された変数をリフレクションによって実行時に動的に参照することはできます。

しかし、ここであなたのケースでは、あなたがそうするように、これらのオブジェクトのオブジェクトのarrayAcad)またはListまたはMapを使用する必要があります。

0

Javaでは、変数名を動的に宣言することはできません。 Java変数名は、実行時ではなくコンパイル時に宣言されます。

あなたの質問からわかるように、Mapを使用してこれを達成できます。 Mapを使用すると、定義のキーでオブジェクトを保存できます。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintStream; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Scanner; 
public class Student { 
    PrintStream p=new PrintStream(System.out); 
    Scanner sc = new Scanner(System.in); 
    String reg; 
    Student(){ 
     //p.println("Enter the name of the student:"); 
    } 

    public void nstd() throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     ArrayList<String> cse=new ArrayList<String>(); 
     ArrayList<String> ece=new ArrayList<String>(); 
     ArrayList<String> mec=new ArrayList<String>(); 
     ArrayList<String> eee=new ArrayList<String>(); 
     HashMap<String, Acad> cseStudents= new HashMap<>(); 
     p.println("Enter the name of the student:"); 
     String name=br.readLine(); 
     p.println("Choose one group from fallowing:"); 
     String group=br.readLine(); 
     if(group.matches("^[Cc][Ss][Ee]$")){ 
      cse.add(name); 
      cseStudents.put(name,new Acad()); 
     } 
     if(group.matches("^[Ee][Cc][Ee]$")){ 
      ece.add(name); 
     } 
     if(group.matches("^[Mm][Ee][Cc]$")){ 
      mec.add(name); 
     } 
     if(group.matches("^[Ee]{3}$")){ 
      eee.add(name); 
     } 
    } 
} 

は、あなたが[HashMapの] [1]、のLinkedHashMap、TreeMapのとHashtableのに有用である可能性Map実装のいくつかの種類があります

Acad required=cseStudents.get(name); 

使用して、必要なオブジェクトをいつでもアクセスすることができます。

それぞれには独自の利点があります。基本的には、

  1. は、HashMapの

    このクラスはマップの順序について保証しません。特に では、オーダーが時間の経過とともに一定のままであることを保証しません。 この実装は、 の基本操作(getおよびput)の一定時間のパフォーマンスを提供します。

  2. のLinkedHashMap

    このリンクリストは、キーマップ(挿入順)に挿入された順序を維持しています。

  3. のTreeMap

    マップは、そのキーの自然順序付けに従ってソートされ、又はコンパレータでコンストラクタが使用されるに応じて、マップ作成時に提供されます。この以外のHashMapのとほぼ同様
    Hashtableの

  4. が同期されます。

関連する問題