【问题标题】:Giving Position to values in an ArrayList为 ArrayList 中的值赋予位置
【发布时间】:2016-07-19 12:55:39
【问题描述】:

我正在为 java 中的 arraylist 中的值分配位置。

例如一个ArrayList containing {5,6,3,1,9,10,0,2,6}。

我怎样才能正确地为数字分配位置以拥有类似{5th,3rd,7th 2nd,1st,8th, 6th,3rd}。

我已经成功地对包含java中数字的arraylist进行了排序。

我现在被困在给数字的位置上。

【问题讨论】:

  • 当你说给位置时,你的意思是添加 "st","nd","rd" 和 "th" 吗?
  • 什么意思?您是在问如何“记住”排序后的数组,在排序之前它的条目在哪里?或者反过来:对于未排序的数组,要知道排序后条目会去哪里?
  • 我的意思是如何将位置(排名)赋予arrayList 中的元素。现在不是后缀。
  • @ALABIJesujoba 我们很清楚排名是位置的同义词,但目前还不清楚排名是基于如何实施的。您能否也添加您正在使用的代码,以便我们了解您想要做什么?
  • 好的,在一个 9 名学生的班级中,在他们的 CA 测试之后,他们的分数如下 {5,6,3,1,9,10,0,2,6}。现在的任务是为学生分配位置。让候选人获得最高分 10 分(成为第一名)、9(第二名)、6(第三名)等......只是试图自动化我们学校教师分配职位的方式一个班级的学生。这更清楚了吗?

标签: java arrays sorting arraylist


【解决方案1】:

那么这样的东西会起作用吗?

    public static ArrayList<String> getPositions(ArrayList<Integer> list) {
    ArrayList<String> positions = new ArrayList<String>();
    String[] endings = { "th", "st", "nd", "rd" };
    Integer last = 100;
    Integer lastRank = 1;
    for (int index = 0; index < list.size(); index++) {
        int position = index + 1;
        if (last == list.get(index)) {
            position = lastRank;
        }
        int remainder = position % 10;
        String rank = position + "";
        String ending = endings[0];
        if (remainder <= 3) {
            if ((position % 100) - remainder != 10) {
                ending = endings[remainder];
            }
        }
        rank = rank + ending;
        last = list.get(index);
        lastRank = position;
        positions.add(rank);
    }
    return positions;
}

我还要感谢 Robert van der Spek 提出了一种更有效的方法来分配职位的结尾。

【讨论】:

  • 好的,在一个 9 名学生的班级中,在他们的 CA 测试之后,他们的分数如下 {5,6,3,1,9,10,0,2,6}。现在的任务是为学生分配位置。让候选人获得最高分 10 分(成为第一名)、9(第二名)、6(第三名)等......只是试图自动化我们学校教师分配职位的方式一个班级的学生。这更清楚了吗?
  • @ALABIJesujoba 该方法接受排序的 arrayList 分数并返回 arrayList 等级。这不是你要求的吗?例如,如果您执行getPositions([10,8,6,4,3]);,则输出将为 ["1st","2nd","3rd","4th","5th"]
  • @ALABIJesujoba 你能接受答案吗?上/下投票按钮下的小勾
  • @ALABIJesujoba 那么有什么问题呢?
  • @ALABIJesujoba 你确定你有最新版本,因为它已经过编辑。
【解决方案2】:

澄清问题后的编辑:

double[] grades = {10.0, 8.8, 8.7, 7.0, 6.0, 4.3}; // Mock data

for(int i = 0; i < grades.length; i++) {
    String position = numberToPositionString(i + 1);
    System.out.println(position + " with the grade " + grades[i]);
}

功能:

public String numberToPositionString(int number) {
    String[] concatPosition = { "th", "st", "nd", "rd"};
    if(number > 3 && number < -3) {
        return number + "th";
    }
    else {
        return number + concatPosition[Math.abs(number)];
    }
}

会产生这样的结果:

  • 10 年级第一
  • 2nd 8.8 级
  • 3rd 8.7 级
  • 4 年级 7.0
  • 5 级,6.0 级
  • 6 年级 4.3

当然,您应该修改它以满足您的需要。您甚至可以考虑使用 TreeMap 而不是数组。它将使您能够匹配学生姓名和年级。希望这对您有所帮助。

【讨论】:

  • 好的,在一个 9 名学生的班级中,在他们的 CA 测试之后,他们的分数如下 {5,6,3,1,9,10,0,2,6}。现在的任务是为学生分配位置。让候选人获得最高分 10 分(成为第一名)、9(第二名)、6(第三名)等......只是试图自动化我们学校教师分配职位的方式一个班级的学生。这更清楚了吗?
  • 在你澄清你的问题后,我改变了答案。
【解决方案3】:

如果您只想在末尾添加结尾,请执行以下操作:

ArrayList<String> positions = new ArrayList<String>();
ArrayList<String> endings =  new ArrayList<String>();
endings.add("st");
endings.add("nd");
endings.add("rd");
endings.add("th");
for(Integer value: arrayList){
    String ending = endings.get(3);
    if(value < 4){
        ending = endings.get(value-1);
    }
    positions.add(value + ending);
}

【讨论】:

  • 不是现在的结局,而是排列数组的真正过程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多