【问题标题】:Array formatting method数组格式化方法
【发布时间】:2017-06-28 23:39:13
【问题描述】:

您好,我正在尝试格式化和创建这个数组:

Person[] persons = { person1, person2, person3, person4, person5, person6, person7, person8, person9, person10 };
// The aim is to form an array of the 5 strongest people's indices above
int[] arrayOfStrongestPeopleIndices = new int[5]; 
for (int index = 0; index < 10; index++){
    int strength = persons[index].strength;

    for (int str : arrayOfStrongestPeopleIndices){

       //something @ here ?

    }
}

所以我试图遍历 10 个人,数组 arrayOfStrongestPeopleIndices 应该是最强人的索引中的 5 个(按从强到弱的顺序,即 array[0] 是 5 个中最强的人的索引,而array[4] 是 5) 中最弱的一个)

问题:如何返回格式为所述格式的 arrayOfStrongestPeopleIndices?

【问题讨论】:

  • 请贴出可执行代码,因为我们无法猜测 person 数组的大小。
  • 您对这篇文章还有疑问吗?
  • 编辑了主帖,现在应该更容易阅读了
  • 你能用List吗?还是这是一项任务,必须坚持数组?
  • 可互换,但最终结果是数组

标签: java arrays sorting syntax format


【解决方案1】:

这是一种返回整数数组的方法,该数组表示最强者的索引。

public int[] findStrongestIndices(Person[] persons) {
    int[] arrayOfStrongestPeopleIndices = new int[5];

    for (int i = 0; i < 5; i++) {
        int temp = 0;
        for (int j = 0; j < 10; j++) {
            int str = persons[j].strength;
            if (i == 0) {
                if (str > temp)
                    temp = str;
            }
            else {
                if (str > temp 
                        && str < persons[arrayOfStrongestPeopleIndices[i - 1]].strength)
                    temp = str;
            }
        }

        for (int j = 0; j < persons.length; j++) {
            if (temp = persons[j].strength)
                arrayOfStrongestPeopleIndices[i] = j;
                break;
        }
    }
    return arrayOfStrongestPeopleIndices;
}

我不得不彻底检查代码以跟上编辑的步伐。此方法将接受任意长度的“Person”数组,并返回一个长度为 5 的整数数组。

【讨论】:

    【解决方案2】:

    https://docs.oracle.com/javase/8/docs/api/java/util/List.html#sort-java.util.Comparator-

    List<Person> p = Arrays.asList(person);
    
    Collections.sort(p, new Comparator<Person>() {
        @Override
        public int compare(Person a1, Persona2) {
            return a1.strenght.compareTo(a2.strenght); //im assuming strenght is a number
        }
    });
    
    person = p.toArray(new Person[0]);
    

    现在你有一个从最弱到最强的有序数组

    【讨论】:

    • 谢谢,不知道有这样的工具,是我循环的人数(目前是 50 人而不是 500 人)导致执行时出现大量延迟,还是因为这个工具速度较慢?
    【解决方案3】:

    所以这是我的想法,试过了,它应该可以工作。 当我在“最强”的 ArrayList 中找到一个比任何人都强的人时,我会将其后的所有元素移动到一个位置。

    ArrayList<int> strongest = new ArrayList<int>();
    strongest.append(-1, -1, -1, -1, -1);
    for (int i = 0; i < 500; i++) {
        int str = persons[i].strength;
        for(int j = 0; j < 5; j++) {
            if(str > strongest[j]) {
                int temp = strongest[j];
                strongest[j] = str;
                str = temp;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 2023-03-21
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多