2016-03-30 18 views
-1

私は人の名前を設定するために使用されるこのメソッドaddPerson(主に)を持っています。オブジェクトの適切な使用

private static Person[] addPerson(Person _person[], int _minAge, int _id){ 
    int personAge; 
    String personName; 
    Scanner scan = new Scanner(System.in); 
    System.out.println("What's his age?"); 
     personAge = scan.nextInt(); 
     if(personAge >= _minAge){ 
      if(!_person[_id].getPerson().equals("")){ 
       System.out.println("Person " + _person[_id].getPerson() + " already exists."); 
      }else{ 
       System.out.println("Enter the name of the person"); 
       Scanner addPerson = new Scanner(System.in); 
       personName = addPerson.next(); 
       _person[_id].setPerson(personName); 
      } 
     }else{ 
      System.out.println("Person is not old enough"); 
     } 
    return _person; 
} 

そして、ここでは人の名前を設定するために使用されている私のカスタムクラスのメソッドsetPersonです。

public void setPerson(String name){ 
    System.out.println("Person added"); 
    personName = name; 
} 

私はその人はすでに私のsetPersonメソッド内に存在するかどうかのチェックを行うべきである知っているが、私は一種の混乱してこれにしています。あなたが見ているように、私は整数を入力することを期待しているので、文字列を入力する場合にエラーが発生しないようにすぐにチェックしてください。

だから私の質問は、同じメソッド内でチェックする必要があり、私のカスタムクラスのメソッドでチェックする必要がありますか?

+1

あなたの 'addPerson'メソッドは非常に奇妙です。なぜ配列ですか?最低年齢をパラメータとするのはなぜですか? 'setPerson'を必要としないように名前をパラメータとして使うのはなぜですか? – Gendarme

+0

@Gendarme _personオブジェクト '_person [_id]'の_idと最低年齢を参照する必要があるからです。なぜなら、ユーザーが入力した年齢が少なくともその年齢であるかどうかを確認する必要があるからです。 'setPerson'については、私はそれを使う必要があるので、正しく行う方法を理解しようとしています。 –

+0

私はチェックがaddPersonになければならないと思います。また、メソッドsetPersonの名前をPersonクラスのsetNameに変更する必要があります。 – RubioRic

答えて

2

あなたのコード(およびあなたの質問)はちょっと混乱しますが、setPerson()に人が配列に存在するかどうかを確認する必要があるかどうかを知りたいと思っていますか?それはPersonクラスのメソッドだから

私はあなたのコードから収集することができるものから、さて、あなたはは、setPerson()でそれを行うべきではありません。 Personクラスは、Personオブジェクトの配列について何も知る必要はありません。

あなたが今やっているやり方はおそらくあなたの最善の策です。

 

コードに関するいくつかの一般的なヒント:

新しいScannerを作成する必要はありません、あなたはちょうどあなたが持っているものを使用することができます。私はまた、あなたのメソッド名の名前setName()の代わりsetPerson()を使用することをお勧めだから、この

Scanner addPerson = new Scanner(System.in); 
personName = addPerson.next(); 

この

personName = scan.next(); 

 

となり、それが名前の持つ意味がありません。それが実際にやっていることが、何か他のことであるとき、一方的な方法です。

+0

私の悪い...私はコードをコピーするのがうんざりです。今修正されました。実際にはIDとしてID –

0

私はこのようにします。しかし、私は現在javaを持っていないので、このスニペットをテストしませんでした。

class Person { 
    private String name; 

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

class Main { 
    private static final int minAge = 22; 
    private static Map<Person> addPerson(Map<Person> people, int id) { 
     if(people.containsKey(id)) { 
      // print that person with this id exists 
      return people; 
     } 
     Scanner scanner = new Scanner(System.in); 
     int age = scanner.nextInt(); 
     if(age < minAge) { 
      // print that given age is invalid 
      return people; 
     } 
     String name = scanner.next(); 
     people.get(id).setName(name); 
     return people; 
    } 
}