2016-03-22 12 views
-1

コードを入力して、リストから情報を取得するプログラムを作成したいとします。例えば:変数名としてのJava入力

マイ入力:

'のコードを入力してください':D001

は、その後、私は、このコードに属する情報をプリントアウトしたいです。情報は 'd001'という名前の文字列に属しているので、この場合は、入力したい変数の名前を入力します。これはどうすればいいですか?または、コードリストにコード名を入力してデータベースリストから情報を取得する方がよいでしょうか? 私は巨大なswitch文を作ることができましたが、これは効率的なコーディングではありません。私は今これを得た:

public class Main { 

    public static Scanner idScanner = new Scanner(System.in); 
    public static int diseaseId = 0; 

    /** ID Scanning and reading: */ 
    public static void executeId() { 
     diseaseId = idScanner.nextInt(); 
     switch (diseaseId) { 
     case 001: 
      System.out.println(IdListener.d001); 
      break; 

     case 002: 
      System.out.println(IdListener.d002); 
      break; 

     case 003: 
      System.out.println(IdListener.d003); 
      break; 

     case 004: 
      System.out.println(IdListener.d004); 
      break; 

     case 005: 
      System.out.println(IdListener.d005); 
      break; 
     } 
    } 

    public static void main(String args[]) { 
     System.out.println(LayoutListener.titleString); /** Title String Display */ 
     System.out.print(LayoutListener.idField); /** ID field Display */ 
     executeId(); 
    } 
} 

public class IdListener { 
    public static String d001 = "[Neuroblastomia]: Tumor that grows on the nerves of the spine."; 
    public static String d002 = "[Anorexia]: Mental disease to avoid eating and consuming."; 
    public static String d003 = "[TEMP3]: TEMP3."; 
    public static String d004 = "[TEMP4]: TEMP4."; 
    public static String d005 = "[TEMP5]: TEMP5."; 
} 
+0

あなたはそのためのインタフェースを使用すべきではありません。ちょうど情報として –

答えて

0

使用反射

フィールドF = IdListener.class.getDeclaredField( "D" +入力)。 f.get(null);

+0

どうすれば使用できますか? – user2780113

+0

リフレクションによってコードが遅くなることを覚えておいてください。最後の手段として使用してください。 – MKM

1

マップの使用は、あなたがやりたいことに対するより良い解決策かもしれません。

Map<String, String> diseases = new HashMap<String, String>(); // Map<ID, Description> 
diseases.put("d001", "[Neuroblastomia]: Tumor that grows on the nerves of the spine."); 
diseases.put("d002", "[Anorexia]: Mental disease to avoid eating and consuming."); 
// the rest of your diseases 

String disId = "d001"が、それは物事がずっと簡単になりますし、あなたが巨大なswitch文を持っていないように。

if(diseases.containsKey(disId)) 
    System.out.println(diseases.get(disId)); 
else 
    System.out.println("That id does not exist!"); 
+0

これを入力スキャナでどうやって使うのですか? +エラーをメインメソッドに入れて修正しました。 – user2780113

+0

入力スキャナで使用するには、たとえば 'String disId = idScanner.nextLine(); 'と入力します。 –

+0

ありがとう!マップを別のクラスに入れたい場合は、どうすればマップにアクセスできますか?だから、私のメインクラスはそれほど難しくないでしょうか? – user2780113

0

非常に混乱しやすい質問です。

データベースについて言及していますが、コードや説明は表示されません。

オクタル・

あなたのコード内の一つの重要な欠陥:数値リテラルに先行ゼロは使用しません。先頭の0は、数値を10進数(10進数)ではなく8進数(8進数)として解釈する必要があることを意味します。

したがって、case 001:case 1:である必要があります。

列挙

あなたは、これらの疾患のコードのわずか数を持っている、と彼らはあなたのアプリ、learn to use an enumの実行時に変更しない場合。 Javaのenumファシリティは、他の言語よりはるかに強力で柔軟性があります。

地図

疾病コードのセットは、実行時に変更されることがあり、そしてあなたがすべてに十分なこれらのいくつか持っている場合

はその後 Mapコレクションを使用し、メモリに快適にフィット。マップは、それぞれが別のオブジェクト(「値」)に関連付けられている一連のオブジェクト(「キー」)をトラッキングします。単語の束を追跡する共通の辞書帳のように、各単語には定義のテキストが割り当てられます。各単語は値(それの定義)にマップされたキーです。

Integerのキー(コード番号)はString値(病気のタイトル/説明)に対応しています。コード番号がわかっている場合は、マップに照合して該当する疾患のタイトルを見つけることができます。

データベース

データベースを使用し、メモリに収まるすべてにあまりにも多く、これらの疾患の多くを持っている場合。たとえば、H2 Databaseとなります。

コード番号があれば、一致する疾患のタイトルをデータベースに問い合わせます。

SQLとJDBCについて学ぶ必要があります。

+0

コメントをいただき、ありがとうございました。 – user2780113

関連する問題