对数组进行排序并将更改链接到另一个大小相同的数组

时间:2016-01-18 09:13:07

标签: java arrays sorting

我正在尝试对作为多项式项的字符串数组进行排序。每个位置都是多项式的1个项,作为一个字符串,并且接近地签名,但我想按权力排序它们。

例如

+ 3×^ 5
+5
-8x
-4x ^ 2

我是如何接近这个是通过创建一个只存储电源的第二个数组,我想根据这个数组对它们进行排序。即

for (int i=0; i<sortArray.length; i++) {
        if (sortArray[i].indexOf("^")!= -1) 
            sortArrayDegree[i] = Integer.parseInt((sortArray[i].
                  substring(sortArray[i].indexOf("^") + 1, sortArray[i].length())));
        else if (sortArray[i].indexOf("x")!= -1)    
            sortArrayDegree[i]=1;
        else 
            sortArrayDegree[i]=0;
    }

但是我不确定如何将两者联系起来,所以对第二个的任何更改都发生在第一个

目前这意味着第二个阵列看起来像这样 5
0
1
2
我以为我可以创建一个新数组并将其存储为第二列(数据类型的冲突),但仍然存在排序问题

2 个答案:

答案 0 :(得分:4)

我不确定你想要的方式是最明智的方式,但这就是你能做到的方法: 创建一个多项式成员的powernumber的类。创建该类Comparable,然后将其放在一个数组中,sort方法将使用您从Comparable接口覆盖的可比方法。

public class PolynomialMember implements Comparable<PolynomialMember> {

    public int power; // public for brevity, but should be private with getters and setters
    public String number; // public for brevity, but should be private with getters and setters

    public PolynomialMember(String number, int power) {
        this.number = number;
        this.power = power;
    }

    @Override
    public int compareTo(PolynomialMember o) {
        return Integer.compare(this.power, o.power);
    }

    // optional: override for pretty printing
    @Override
    public String toString() {
        if(!number.equals("0")) {
            if(number.charAt(0) == '-') {
                return number + "x^" + power;
            } else {
                return "+" + number + "x^" + power;
            }
        } else {
            return "";
        }
    }
}

这样你不需要两个数组,你当然不应该“链接”两个数组。

您可以像这样使用此类:

public static void main(String[] args) {

    List<PolynomialMember> polynom = new ArrayList<PolynomialMember>();
    polynom.add(new PolynomialMember("-5", 3));
    polynom.add(new PolynomialMember("7", 1));
    polynom.add(new PolynomialMember("4", 0));
    polynom.add(new PolynomialMember("8", 2));

    for(PolynomialMember pm : polynom) {
        System.out.print(pm + " ");
        // prints: -5x^3 +7x^1 +4x^0 +8x^2 
    }
    System.out.println();
    Collections.sort(polynom); //this is where the magic happens.
    for(PolynomialMember pm : polynom) {
        System.out.print(pm + " ");
        // prints: +4x^0 +7x^1 +8x^2 -5x^3 
    }
}

答案 1 :(得分:0)

如果我理解正确,我真的不确定,你想要绑定包含值类型\ immutables的2个数组的数据。我知道从2个数组绑定数据的最简单方法是创建一个包含它们作为私有成员的类,并公开公共方法来控制它们。在这些方法中,您可以实现定义它们之间关系的逻辑。