我不太确定怎么说这个有意义,但我会尽我所能。
说我有2节课。我的主要课程和Person
课程。
我的主要课程将从Person
类创建一些像这样的对象
public class Example {
static Person bob = new Person(23);//Age
static Person fred = new Person(34);
static Person John = new Person(28);
//..and so on
public static void main(String args[]){
..
}
}
并在我的Person
班..
public class Person{
private int age;
public Person(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
}
现在,如果我想要弗雷德的年龄,我只需致电Fred.getAge();
。
但是,在我的计划中,我不知道我的年龄是什么样的人。它随机选择一个,我需要获取名称而不直接调用该对象。例如,我的Person类中会有类似的东西:
public static Object getPerson(){
//Some code to get a random integer value and store it it Var
switch(Var){
case 1:
return bob;
case 2:
return fred;
case 3:
return john;
}
}
我期望这样做是返回一个我可以像这样使用的对象:
public static void main(String args[]){
System.out.println(Person.getPerson().getAge());
}
我认为可以做的是首先调用getPerson()
,随机返回bob
,fred
或john
,然后调用getAge()
}。因此,如果getPerson()
返回fred
,那么它与执行fred.getAge();
现在,这不起作用,这是我认为对我有意义的唯一方法。
我该怎么做,所以它实际上做了我想要的?
我是Java和OOP的新手,这是我第一次真正使用不同的对象。我很抱歉,如果我使用了错误的条款并且奇怪地解释了这些内容。
答案 0 :(得分:3)
更改
public static Person getPerson(){
到
{{1}}
您不能在Object上调用getAge,因为Object类型没有定义getAge()。
答案 1 :(得分:3)
为什么不将该名称作为Person类的属性?
class Person {
// ... your existing code for age...
private String name;
String getName() { return name; }
// add name to constructor...
public Person(String name, int age) {
// set them up here...
}
}
我看到它的方式是name
对你来说是个人,但变量john
对程序和计算机来说是不可靠的......你甚至可以使用p1 = Person("Joe", 42);
要按年龄结识某个人,您可以使用Map
作为关键字,将人作为价值。
答案 2 :(得分:1)
这可能是一种误解,但我如何解释这个问题如下:
Person
个对象,而不是将它们作为static
变量。让我们先解决主要问题。当他们可能不应该创建静态变量时,你可以创建它们;它们应该只是作为数组的条目创建。
这样做的方法是通过这个宣言:
Person[] people = new Person[] {new Person(23), new Person(34), new Person(28)};
主要问题现在是因为您还没有将name
字段附加到任何人身上,因此您无法参考哪个人的年龄属于谁这些情况。你可以轻松地做到这一点:
public class Person {
private String name;
private String age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getters for name and age
}
...然后您可以使用两个值来实例化Person
。
new Person("Bob", 23);
现在我们已经解决了一个问题(首先是将人员存储在哪里),现在我们需要一种方法来随机访问它们。
为此,我们可以使用Random#nextInt()
。
Random rand = new Random();
System.out.println("Person's age - " + people[rand.nextInt(people.length)]);
这将随机从阵列中拉出Person
并打印出他们的年龄。
答案 3 :(得分:0)
如果你想在人类中找到一个随机的人,你可以存储对每个创建的人的引用,然后从该列表中随机选择
public class Person {
// A List of every Person Created.
private static final List<Person> allPeople = new ArrayList<People>();
// A source of random numbers
private static final Random rand = new Random();
...
public Person(int age) {
...
// Every time we create a new Person, store a reference to that person.
addPerson(this);
}
// synchronized as ArrayLists are not thread safe.
private static synchronized addPerson(Person person) {
allPeople.add(person);
}
...
public static Person getRandomPerson() {
// Get a random number between zero and the size of the list.
int random = rand.nextInt(allPeople.size() -1);
return allPeople.get(random);
}
现在这段代码不是我在生产环境中会做的,但问题听起来像是一个练习。更好的方法是在Example类中存储List中创建的人员。但是你试着回答这个问题。