You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同步降序排序double数组sales与对应String数组sales1

解决销售额数组排序后与销售人员姓名不匹配的问题

我明白你现在遇到的困扰——对double类型的sales[]按降序排序后,对应的销售人员姓名数组sales1[]出现了部分匹配错误的情况。咱们先从你的代码入手分析,再给出两种靠谱的解决方案。

一、现有代码的问题排查

先看你当前的排序实现:

public void sort(double sales[], String sales1[]) {
    int i, j;
    double temp;
    String temp1;
    for (i = 0; i < sales.length; i++) {
        for (j = i + 1; j < sales.length; j++) {
            if (sales[i] < sales[j]) {
                temp1 = sales1[i];
                sales1[i] = sales1[j];
                sales1[j] = temp1;
                temp = sales[i];
                sales[i] = sales[j];
                sales[j] = temp;
            }
        }
    }
}

从逻辑上看,这段选择排序的写法是正确的:每次发现sales[j]比sales[i]大时,同时交换两个数组对应位置的元素,理论上能保证姓名和销售额的关联关系。那为什么会出现不匹配?大概率是这两个场景:

  • 调用方法时,sales[]和sales1[]的长度不一致(比如一个是5个元素,另一个是4个),导致部分元素无法对应;
  • 排序后输出/使用数组时,出现了索引错误(比如循环遍历的长度搞错了)。

二、修正后的数组排序方案

如果坚持使用两个数组的方式,我们可以在代码里加入参数校验,提前规避数组长度不匹配的问题,同时保留原有的排序逻辑:

public void sortSalesWithNames(double[] sales, String[] salesNames) {
    // 先校验参数合法性,避免后续出错
    if (sales == null || salesNames == null || sales.length != salesNames.length) {
        throw new IllegalArgumentException("销售额数组和姓名数组必须非空且长度一致");
    }

    int i, j;
    double tempSales;
    String tempName;
    int length = sales.length;

    for (i = 0; i < length; i++) {
        for (j = i + 1; j < length; j++) {
            // 降序排序:当前元素小于后续元素时交换
            if (sales[i] < sales[j]) {
                // 交换姓名
                tempName = salesNames[i];
                salesNames[i] = salesNames[j];
                salesNames[j] = tempName;
                // 交换销售额
                tempSales = sales[i];
                sales[i] = sales[j];
                sales[j] = tempSales;
            }
        }
    }
}

这样能提前发现参数错误,避免出现莫名其妙的关联匹配问题。

三、更健壮的方案:用对象封装关联数据

其实,把销售额和姓名这类强关联的数据封装成一个类,才是更符合面向对象思想的做法,能从根源上杜绝“数据关联错误”的问题。示例如下:

1. 定义销售人员类

class SalesPerson {
    private String name;
    private double salesAmount;

    public SalesPerson(String name, double salesAmount) {
        this.name = name;
        this.salesAmount = salesAmount;
    }

    // Getter方法,用于获取属性
    public String getName() {
        return name;
    }

    public double getSalesAmount() {
        return salesAmount;
    }
}

2. 对对象数组排序

使用Arrays.sort()结合自定义比较器,实现按销售额降序排序:

import java.util.Arrays;
import java.util.Comparator;

public class SalesSortDemo {
    public static void main(String[] args) {
        // 初始化你的销售人员数据
        SalesPerson[] salesPeople = {
            new SalesPerson("kapas", 1200.5),
            new SalesPerson("redang", 2800.0),
            new SalesPerson("perhentian", 1950.0),
            new SalesPerson("tenggol", 3500.0),
            new SalesPerson("lang tengah", 1600.0)
        };

        // 按销售额降序排序
        Arrays.sort(salesPeople, (sp1, sp2) -> 
            Double.compare(sp2.getSalesAmount(), sp1.getSalesAmount())
        );

        // 输出排序结果
        for (SalesPerson sp : salesPeople) {
            System.out.println(sp.getName() + ": " + sp.getSalesAmount());
        }
    }
}

这种方式把姓名和销售额绑定在一起,排序时永远不会出现关联错位,代码的可读性和可维护性也更强。

内容的提问来源于stack exchange,提问作者Aidid kamil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:35