2015-11-19 62 views
2

我错过了在Java中的一次演讲中,并且对象是类,方法,构造等作业是一个任务:引用参考数组的方法?

创建一个类人,天体,其中描述的人,并 只包含两个felds:name(String)和出生年份(int)。在 这一类,定义

  • 构造函数取姓名和出生年份;

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

  • 方法是女性如果这个人是一个女人(我们假设,不是非常理智的,只有女性和所有女性的名字结尾 字母'a');否则该方法返回false;

  • static function getOlder将两个对Person类的对象进行引用,并将引用返回给这两个人中的较老者;

  • 静态函数getOldest接受对Person类的对象的引用数组的引用,并将该引用返回为数组中表示的最老的人;

  • 静态函数getYoungestFemale服用参照refe-分配办法的阵列,以类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

如果你没有时间来解释,一个“方法的一些示例带至一个参考阵列“应该足以让我获得基本的理解。

在此先感谢。

+0

抛开事实与实例的问题涉及'Person':如果你被要求从一个数组中获得最大的'int',或者最小的'int',你能做到吗? –

+4

你还没有完全得到3分或4分。你几乎肯定不想在Person的默认构造函数中创建6个Person实例。 –

+0

@AndyTurner我知道如何在“public static void main(String [] args)”主体中编写“hello,world”级程序,就像用循环排序数组,找到最大值等等。突然需要使用构造函数和多个类。编辑:点3只需要用最后一个字符检查重新选择“乔安娜”,我可以稍后再做。 – Shamanix

回答

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

1)类型不正确。该问题指出,该方法应该返回对老年人的引用,而不是*老年人的名字。 –

+0

_Just删除问号!_ - 我把它们放在那里表明我不知道该写什么,当然我不会在最终的代码中使用它们。所以,如果我删除它们,我怎么找到例如先生。 Jan如果参考是x? – Shamanix

+1

getOlder方法只需要取2个人对象。你已经叫这些人和人y。在这个方法里面,你不关心他们是谁的对象。为了使用这个方法,你在'main'方法中创建了两个person对象,比如person1 = new Person(“bob”);',类似于person2,然后像getOlder(person1, person2);' – EkcenierK

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

首先创建另一个具有主要方法的类。在主创建磁盘阵列:

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); 

在Person类:

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