Java 旧阵列中的新阵列

Java 旧阵列中的新阵列,java,arrays,Java,Arrays,我需要写方法getYoungestFemale 主要内容: end 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); S

我需要写方法getYoungestFemale

主要内容:

end 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;
}
static Person[]getYoungestFemale(Person[]a){
int z=a[0]。出生;
int x=0;
对于(int i=0;iz){
x=i;
}
}
}
System.out.print(a[x].name+“-”+a[x].birth);
返回a;
}
但这给了我奇怪的结果
a[x].name
很好(我真的不知道为什么,它也应该是错误的),birth和x index是错误的

我认为这是因为我将出生数据与int z进行比较,int z是组中最阳刚的人,但男性是阳刚的,他是阳刚的,然后是最阳刚的女性。我想我需要创建第二个arr,只有woomen,而int z应该是女性的第一个。我不知道怎么做


我的第二个问题是,为什么a[x]。名字好,给我这个组中最杨的女性?

也许你需要更新你的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'?
}
给你的班级


OBS:


你认为至少存在一个年轻女孩吗

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

if(a[i].birth>z){
  x = i;
  z = a[i].birth --- so this is bigger year find until now
}
没有它,你会发现最后一个人比第一个人年轻,而不是最年轻的

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


另外,我认为名字的最后一个字母不是判断一个人是男性还是女性的好参数。也许您必须向Person对象添加一个数据成员?

您能识别代码以使其可读吗?您声明为PER,然后作为Person传递。。一个问题是<代码> z <代码>(即<代码>出生年份<代码>,考虑重命名)只在方法开始时设置一次。我想要在if块中设置
z
if(a[I].birth在您创建的Person类中,您需要一个字段来表示它所代表的人的性别。如果您没有这样的字段,那么就无法可靠地区分男性和女性。Sansa不是比Arya更老吗?
布尔isMale/isFemale
看起来更清楚。在任何情况下,IMHO
布尔
都不是正确的数据类型为此。可能使用
enum
更合适。@m0skit0谢谢,我很感激isMale;所以我编辑了我的答案。是的性别/性别应该亲自初始化class@jsurf对不起,我没有收到你的评论。这只是一种假装吗?@jsurf是的,好吧,也许对我来说是含蓄的。但这不是谢谢=)
boolean isMale; // true for male, false for female
if(a[i].birth>z){
  x = i;
  z = a[i].birth --- so this is bigger year find until now
}