【问题标题】:Drop highest and lowest of an array in Java在Java中删除数组的最高和最低
【发布时间】:2015-11-30 15:11:11
【问题描述】:

现在我有一个处理分数的项目。需要对分数进行排序,去掉最高和最低的分数,然后将中间的分数加在一起。我已经创建了数组,并完成了排序。我不知道如何降低最高和最低。任何帮助表示赞赏,谢谢!

public class Tester {

public static void main(String[] args) {
    double[] fractions = {(6/7),(2/4),(3/4),(3/18),(1/8),(10/20),(2/6)};
}
public static void selectionSort (int... arr)
{
    int i = 0, j = 0, smallest = 0;
    int temp = 0;

    for (i = 0;i<arr.length - 1;i++)
    {
        smallest = i;
        for (j = 1; j<arr.length - 1; j++)
        {
            if (arr[j]<arr[smallest])
                smallest = j;
        }
        temp = arr[smallest];
        arr[smallest] = arr[i];
        arr[i] = temp;

    }

    //Drop highest and lowest here
}
}

【问题讨论】:

  • 即使您使用的是double,您的排序方法也会使用int 数组?
  • 创建另一个数组并将其从第二个元素复制到最后一个元素 - 1
  • 我猜是的,它现在没有因为 int 或 double 而出现任何错误

标签: java arrays class sorting


【解决方案1】:

首先,您必须在数组初始化中将小数点添加到分母或分子中,以获得一个未满0 的数组(这样您就不会进行整数数学运算)。或者只是在整数数学的末尾添加一个d (6/7d)。

接下来您可以使用Arrays.sort 进行排序(或继续使用您的自定义排序方法),然后您可以使用Arrays.copyOfRange 获得一个子数组。这非常方便,因为您可以给它一个起始索引和一个结束索引。像这样的东西应该可以解决问题:

public static void main(String[] args) {
    double[] fractions = {(6./7),(2./4),(3./4),(3./18),(1./8),(10./20),(2./6)}; //Add decimal points
    Arrays.sort(fractions); //Sort your array
    double[] removeLowestAndHighest = Arrays.copyOfRange(fractions, 1, fractions.length-1); //returns new array with first and last element removed.    
}

【讨论】:

  • 好的,我想知道为什么我打印数组时得到的都是 0.0,谢谢你的帮助。
  • 我更喜欢1/3d 而不是1./31/3.floats 更清晰且工作方式相似。
  • @BinkanSalaryman 感谢您的建议。我已经更新了解决方案以包括这个替代方案。
  • 只是好奇,是双倍的意思吗?
  • @homidhomi4 是的。 d 是您声明double 的方式。你也可以做类似(double) 1/ 3
【解决方案2】:

我建议使用List,然后你可以简单地使用.remove(0), .remove(size-1)

【讨论】:

  • 这是一种方法吗?那我怎么称呼它。我可以做我的arrayname.list 吗?
  • 类似这样的:ArrayList 数组;数组 = 新的 ArrayList(); array.add("项目"); array.remove(0);
【解决方案3】:
// Create a new array that is 2 smaller than the orriginal.
int[] newArr = new int[arr.length-2];  
// Iterate through the old array, skipping the first and last elements.
for(int i = 0; i < newArr.length; i++)
{
    newArr[i] = arr[i+1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多