来自旧数组的新数组

时间:2016-05-27 14:43:04

标签: java arrays

我需要写方法getYoungestFemale。

主:

Person[] person ={new Person("Bolton", 1992),new Person("Stark", 1973),new Person("Lannister",1962), new Person("Sansa", 2001), new Person("Arya", 1995), new Person("Olenna", 1938)};

Person.getYoungestFemale(pers);

结束Person.java

static Person[] getYoungestFemale(Person[] a){

   int z=a[0].birth;
   int x = 0;

    for(int i=0;i<a.length;i++){
      String name=a[i].name;
      char temp = name.charAt(name.length()-1);
      String s = Character.toString(temp);

      if(s.equals("a")){
         if(a[i].birth>z){
            x = i;
         }
      }
    }

    System.out.print(a[x].name+" - "+a[x].birth);
    return a;
}

但它给了我奇怪的结果。 a.[x].name很好(我真的不知道为什么,也应该是错的),出生和x索引是错误的。

我认为这是因为我将出生数据与int z进行比较,群体中最炙手可热的人是什么,但这是男人,而他是最胖的女性。我想我需要创建第二个arr,只有woomen,而int z应该是第一个女性。我不知道怎么做......

我的第二个问题是,为什么一个[x] .name是好的,给我这个组中最胖的女人?

2 个答案:

答案 0 :(得分:0)

也许你需要更新你的z而不是总是使用相同的。

我也做了一些优化,事实上你可以跟踪你的索引,试试这个:

static Person[] getYoungestFemale(Person[] a){

   int youngest = 0;

   for(int i=0;i<a.length;i++){

     if(a[i].name.charAt(a[i].name.length()-1) == 'a')
       if(a[i].birth>a[youngest].bith){
          youngest = i;
       }
   }

  System.out.print(a[youngest].name+" - "+a[youngest].birth);
  return a;   // Are you shure to return all 'a'?
}

提示:

如果你需要检查男性和女性;检查最后一个字符是不是一个好主意。 也许你可以添加一个:

boolean isMale; // true for male, false for female

到您的班级Person

<强> OBS:

你是否认为至少存在一名年轻女孩!?

答案 1 :(得分:0)

当你找到一个年轻人时,你不会更新z:

if(a[i].birth>z){
  x = i;
  z = a[i].birth --- so this is bigger year find until now
}

如果没有它,你会发现最后一个比第一个人年轻的人而不是最年轻的人。

警告:如果在数组中没有女性,则此方法将返回第一个元素。

P.S。我认为姓名的最后一个字母不是发现一个人是男性还是女性的好参数。也许您必须将数据成员添加到Person对象中?