首页 > 解决方案 > 不使用 java.util 将对象数组排序到堆栈中

问题描述

我必须通过随机生成他们的年龄和 ID 来创建一个包含 50 人的对象数组。之后,我必须将列表中生成的每个人分类为 2 个堆栈数组,其中第一个堆栈将包含年龄低于 18 岁的人,第二个堆栈将包含 18 岁以上的人。人的分类,包括删除初始列表的每个元素并将它们插入相应的堆栈中,必须是一个自动执行的过程。我已经完成了第一部分,但我在分类方面遇到了问题,因为我无法使用 java.util 创建堆栈。如果您能帮我解决这个问题,我将不胜感激。

public class Stacks01 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    //create array of employee object  
    Person[] person = new Person[50] ;
    Person[] minors = new Person[50];
    Person[] adults = new Person[50];


     for (int i = 0; i < 50; i++)
     {
         person[i] = new Person (generatorId(100000000, 999999999), generatorAge(0,100));
     }
     
     for (int j = 0; j < 50; j++)
     {
         System.out.println("Person "+(j+1)+": ");
         person[j].showData();
         
     }
     
}

//Person class with Id and age as attributes
static class Person{
  int Id;
  int age;
  //Person class constructor
  Person(int pId, int e){
     Id = pId;
     age = e;
  }
  
  public void showData(){
    System.out.print("Id: "+Id + "  " + " age: "+age);
    System.out.println();
}
}


public static int generatorId(int min, int max){
double id;
    id = ((Math.random() * (max - min)) + min); 

return (int) id; 
} 

public static int generatorAge(int min, int max){
double age;
    age = ((Math.random() * (max - min)) + min); 

return (int) age; 
} 

标签: javaarraysstack

解决方案


只是,遍历 person 数组,并为索引保存两个计数器。

for(int i=0, a=0, m=0; i < person.length; i++){
   var aux = person[i];
   if(aux.age < 18) minors[m++] = aux;
   else adults[a++] = aux;
}

在我的建议中,a 是一个计数器,它会随着检测到的每个成年人而增加;和 m 增量为每个检测到的未成年人。

另外,我建议删除 Person.showData,而不是您可以覆盖 toString,然后简单地调用System.out.println(person[i]);

此外,您可以使用 java.util.Random 代替 Math.random,它具有更好的方法(nextInt、nextLong,甚至可以生成随机数流)。我会用那个。


推荐阅读