参考一系列参考文献的方法?

时间:2015-11-19 22:13:54

标签: java arrays class methods

我错过了我在Java上的一个讲座,主题是课程,方法,构造函数等。作业是一项任务:

  

创建一个类Person,其对象描述人,以及哪些   仅包含两个felds:name(String)和出生年份(int)。在   这个类,定义

     
      
  • 构建者取名和出生年份;

  •   
  • 构造函数仅取名称并将出生年份设置为默认值1990;

  •   
  • 方法isFemale如果这个人是女性则返回true(我们假设,不是很明智,只有女性和所有女性都有名字结束   用字母' a');否则该方法返回false;

  •   
  • 静态函数getOlder对类Person的对象进行两次引用,并将引用返回给这两个人中的较旧者;

  •   
  • 静态函数getOldest引用对Person类对象的引用数组并返回引用   数组中代表的最老的人;

  •   
  • 静态函数getYoungestFemale将类引用数组引用到Person类的对象并返回引用   对阵列中表示的最年轻的女人,如果没有,则为null   数组中的女人。

  •   
     

在一个单独的类中,编写一个整体的main函数   测试类Person的功能。

我检查了一些教程和解释,我没有直接去寻求帮助,但是经过2个小时的撕扯我的头发之后我才能想出这个:

public class Person {
    String name;
    int yob; //year of birth

    public Person() {
        Person jan = new Person("Jan", 1995); //the names are polish
        Person joanna = new Person("Joanna", 1993);
        Person michal = new Person("Michal", 1980);
        Person beata = new Person("Beata", 1979);
        Person kazimierz = new Person("Kazimierz", 1998);
        Person magdalena = new Person("Magdalena", 1999);
    }

    public Person(String name, int yob) {
        this.name = name;
        this.yob = yob;
    }

    public Person(String name) {
        this.name = name;
        this.yob = 1990;
    }

    public static boolean isFemale(String name) {
        if(name.equals("Joanna")) {
            return true;
        } else {
            return false;
        }
    }

    public static String getOlder(Person x?, Person y?) { // if I understand the task correctly, I should reference any two names?
        if(x?.yob>y?.yob) {
            return x?.name;
        } else {
            return y?.name;
        }

    //getOldest and getYoungestFemale methods go here

    }
}

但是,我无法绕过最后三步。我的大脑真的沸腾了。如果有人能解释最后三个要点(getOlder对任何2个人的引用和getOldest / getYoungestFemale

,那将会非常有帮助

如果你没有时间解释,可以参考一个数组"方法的一些例子"应该足以让我获得基本的理解。

提前致谢。

3 个答案:

答案 0 :(得分:2)

以下是一些提示,可以帮助您自己解决问题,而无需我提供解决方案;)

1)

 public static String getOlder(Person x?, Person y?) {
      // if I understand the task correctly, I should reference any two names?     
     if(x?.yob>y?.yob) { 
            return x?.name;       
     } else {         
            return y?.name;       
     }
}

这段代码几乎是正确的!只需删除问号!还要记住,老年人会有更早的yob。编辑,你也需要返回对人的引用,而不是他们的名字,所以返回x或y。

2)getOldestgetYoungestWoman

Person[]

是对Person对象的引用数组。您应该能够阅读如何遍历数组元素并比较值。

3)额外:如果在构造函数中声明这6个Person对象,则无法在该类的其他方法中访问它们。可以在那里创建Person对象,但是必须在构造函数之外声明它们。在课堂上宣布他们。

答案 1 :(得分:2)

通常..你不要把它称为“对某些引用数组的引用”你只是说“某事物的数组”。即使对象的数组是对象的引用数组。就像对象的变量只是对对象的引用一样。

Type heyImAReference = new ImTheObject();

所以当你写

Person person = new Person();

您将类Person作为类型,person作为对该类的实例(或对象)的引用,并将new Person()的结果实体作为被引用的实际内容。通常称为“实例”或在您的情况下称为“对象”。

当谈到人员阵容时你会这样做

Person[] persons = new Person[5];

你通过new Person[5]创建一个有5个插槽的数组实例,在每个插槽中可以比喻一个Person实例,实际上虽然你有5个引用。 Person[0]是第一个,Person[1]是第二个,依此类推。所以这是“类Person对象的引用数组”。

persons是对此的引用。所以它是“对类Person对象的引用数组的引用”

  • static函数getOldest引用对Person类对象的引用数组,并将引用返回给数组中表示的最老的人

仅仅意味着

static Person getOldest(Person[] persons) {
    ...
}

我会称这个方法接受一组人并返回一个Person。虽然从技术上讲,它只是引用和出来的参考。 Person个对象不会“移动”

答案 2 :(得分:2)

首先创建另一个具有main方法的类。在main中创建一个数组:

Person[] parr = new Person[6];
//Then fill all your person to this array:
parr[0] = new Person("name", year);
parr[1] = ....

然后将此数组处理程序传递给您的方法:

Person p1 = Person.findSomething(parr);

在人类中:

public static Person findSomething(Person[] parr){
  for (Person p : parr){
     if (p.name.endsWith("a")) return p;
  }
  return null;
}