2016-04-13 5 views
0

iは、アレイ内の患者の情報を記憶し、その特定の患者の記録がされる、に基づいて患者のIDを入力するようユーザに要求プログラムを作った玉画面に表示されます。今私は、ユーザーがIDを入力する患者のレコードを更新する必要がありますどのステートメントを使用する方法を知っていないと..私は追加と削除を使用することができますが、私はそう確信していないと信じて..私のプログラム: - (直後== 1)は、私が何をすべきか考えて問題を抱えている場所です。有する問題

package samplee.java; 

import java.util.*; 

public class patient$ { 

    public static void main(String[] args) { 
     ArrayList<patientss> patient1 = new ArrayList<patientss>(); 
     Scanner src = new Scanner(System.in); 
     Scanner sc = new Scanner(System.in); 
     Scanner stc = new Scanner(System.in); 
     Scanner sdc = new Scanner(System.in); 
     Scanner update = new Scanner(System.in); 
     int id, it, num, i; 
     String name; 
     int ages; 
     int id1; 
     Boolean leave = false; 
     while (!leave) { 
      patientss xx = new patientss(); 
      System.out.println("Enter the patient's ID "); 
      System.out.println("-1 to finish entering"); 
      id = src.nextInt(); 
      if (id != -1) { 
       xx.setId(id); 
      } 
      System.out.println("Enter the patient's name "); 
      System.out.println("-1 to finish entering"); 
      name = stc.next(); 
      if (id != -1) { 
       xx.setName(name); 
       patient1.add(xx); 
      } 
      System.out.println("Enter the patient's phone number"); 
      System.out.println("-1 to finish entering"); 
      num = sdc.nextInt(); 
      if (id != -1) { 
       xx.setNum(num); 
       patient1.add(xx); 
      } else { 
       leave = true; 
      }//Escape the while loop. 
     } 
     System.out.println("Enter the id of a student"); 
     it = sc.nextInt(); 
     patientss tt = new patientss(); 
     for (i = 0; i < patient1.size(); i++) { 
      tt = patient1.get(i); 
      if (it == tt.getId()) 
       System.out.println(tt.toString()); 
      break; 
     } 
     System.out.println("Enter the id of the student you want to update"); 
     Scanner id11 = new Scanner(System.in); 
     id1 = id11.nextInt(); 
     int up, id2; 
     patientss dd = new patientss(); 
     for (i = 0; i < patient1.size(); i++) { 
      dd = patient1.get(i); 
      if (id1 == dd.getId()) { 
       System.out.println("If you want to change the name, type 1"); 
       System.out.println("If you want to change the number, type 2"); 
       System.out.println("If you want to change the id, type 3"); 
       up = update.nextInt(); 
       if (up == 1) { 

       } 
      } 
     } 
    } 
} 

そして、いや、これは私のpatientssクラスである: -

package samplee.java; 

public class patientss { 
    int id; 
    String name; 
    int num; 

    public int getNum() { 
     return num; 
    } 

    public void setNum(int num) { 
     this.num = num; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String toString() { 
     return name + " " + id + " " + num; 
    } 
} 
+2

'System.in'に5つの' Scanner'インスタンスは必要ありません。ちょうど1つ使ってください。 – Tom

+1

あなたのインデントが大きく乱れています。これを修正してください。コードは読めません(たとえば、最初の '' if''を見てください)。また、同じ入力ストリームに5つのスキャナがあるのはなぜですか? – f1sh

+0

すでに患者を変数 'dd'に抽出しました。その値を変更するためにsetterメソッドを呼び出すために使用します。 – Tom

答えて

3

HashMap<Integer, Patientss>代わりのArrayList<Patientss>を使用することを検討してください。この方法で、あなたはそのIDの患者を簡単に探すことができます。

のHashMapを取得し、あなたのオブジェクトを取得し、更新するために使用することができ、実装を入れています。

0

あなたがArrayListを使用したいのであれば、それは大丈夫ですが、@ yogidilipが書いたように、Idでオブジェクトを検索する必要がある場合は、HashMapを使うのが最良の方法ですが、

あなたはあなたのリスト内のIDを検索するループ方式を持っている必要があり

、例えば

//Object to update 
patientss patientToUpdate; 

for(patientss patient : patient1){ //ObjectType currentObject : ListName 
    if(patient.getId() = inputId){ 
     //Object found 
     patientToUpdate = patient; 
     //End for when found 
     break; 
    } 
} 

その後、あなたは変数patientToUpdate内のオブジェクトを持っていて、属性の新しい値を設定することができます。

あなたのお役に立てば幸いです。