0

0

Java中多数组协同处理订单:商品信息与数量的关联与展示

聖光之護

聖光之護

发布时间:2025-10-02 10:25:08

|

249人浏览过

|

来源于php中文网

原创

Java中多数组协同处理订单:商品信息与数量的关联与展示

本文详细阐述了如何在Java中使用多个数组协同处理订单数据。通过一个具体的订单预览场景,演示了如何将存储商品名称、价格的独立数组与包含商品索引和数量的订单数组进行关联。重点讲解了处理1-based索引与0-based数组索引差异的方法,并提供了健壮的代码实现,包括数据验证,以生成清晰的订单详情输出。

1. 场景概述与数据结构

在许多实际应用中,数据往往分散存储在不同的结构中,需要通过关联才能形成完整的业务信息。本教程将以一个订单预览系统为例,展示如何利用java中的多个数组来协同处理数据。

我们有以下三种核心数据结构:

  • 商品名称数组 (NAMES): 一个 String 类型的数组,存储所有商品的名称。
    final static String NAMES[]= {"Spa reine 25 ","Bru plate 50", /* ... 其他商品名称 ... */};
  • 商品净价数组 (NETPRICES): 一个 double 类型的数组,存储对应商品的净价格。其索引与 NAMES 数组的索引一一对应。
    final static double NETPRICES[]= {2.2, 2.3, 3.9, /* ... 其他商品价格 ... */};
  • 订单数组 (order): 一个二维 int 类型的数组,表示用户所下的订单详情。数组的每一行代表一个订单项,其中:
    • order[i][0]:表示商品的索引(注意:本例中为1-based索引)。
    • order[i][1]:表示该商品的购买数量。
      int Order[][]={{3,2},{1,3},{12,4},{37,1},{36,3},{0,0},{0,0},{0,0}, {0,0}};

      我们的目标是编写一个方法,能够遍历 order 数组,根据其中的商品索引从 NAMES 和 NETPRICES 数组中获取相应信息,计算每个订单项的总价,并最终输出一个格式化的订单预览。

2. 核心挑战:索引不一致性处理

本场景中一个关键的挑战是 order 数组中存储的商品索引是 1-based(从1开始计数),而Java数组的索引默认是 0-based(从0开始计数)。这意味着,如果 order[i][0] 的值为 3,它实际上对应的是 NAMES[2] 和 NETPRICES[2]。

因此,在从 NAMES 和 NETPRICES 数组中获取数据时,我们需要对 order[i][0] 的值进行减一操作,以将其转换为正确的0-based索引。

立即学习Java免费学习笔记(深入)”;

3. 实现订单预览方法

我们将创建一个名为 previewOrder 的静态方法,它接收 order 数组作为参数。该方法将负责遍历订单、查找商品信息、计算总价并打印结果。

3.1 方法结构与遍历

我们将使用 for 循环来遍历 order 数组中的每一个订单项。

BJXSHOP购物系统
BJXSHOP购物系统

BJXSHOP购物系统是一个国内领先,功能完善、展示信息丰富的电子商店销售平台,现有通用版系统(单用户和多用户)、鲜花销售系统、图书销售系统、数字卡销售系统、成人用品销售系统,服饰销售系统等。BJXSHOP购物管理系统是一个针对企业与个人的网上销售系统;开放式远程商店管理;完善的订单管理、销售统计、结算系统;强力搜索引擎支持;提供网上多种在线支付方式解决方案;强大的技术应用能力和网络安全系统,同时

下载
public static void previewOrder(int order[][]) {
    // 遍历订单数组的每一行
    for (int i = 0; i < order.length; i++) {
        // ... 处理每个订单项的逻辑 ...
    }
}

3.2 索引转换与数据获取

在循环内部,首先进行索引转换,然后使用转换后的索引从 NAMES 和 NETPRICES 数组中获取商品名称和价格。

    public static void previewOrder(int order[][]) {
        for (int i = 0; i < order.length; i++) {
            // 将1-based的商品索引转换为0-based
            int itemIndex = order[i][0] - 1;

            // 获取商品名称、价格和购买数量
            String name = NAMES[itemIndex];
            double price = NETPRICES[itemIndex];
            int amount = order[i][1];

            // ... 后续计算和打印 ...
        }
    }

3.3 健壮性考虑:索引有效性检查

在实际应用中,用户输入或数据源可能会包含无效的商品索引(例如,索引小于1或超出商品数组的范围)。为了避免 ArrayIndexOutOfBoundsException 运行时错误,我们需要在访问 NAMES 和 NETPRICES 数组之前,对转换后的 itemIndex 进行有效性检查。

如果 itemIndex 无效,我们可以选择跳过当前订单项,或者记录错误信息。在本教程中,我们选择跳过。

    public static void previewOrder(int order[][]) {
        for (int i = 0; i < order.length; i++) {
            int itemIndex = order[i][0] - 1; // 转换为0-based索引

            // 检查索引是否有效
            if (itemIndex < 0 || itemIndex >= NAMES.length || itemIndex >= NETPRICES.length) {
                // 如果索引无效,跳过当前订单项
                System.err.println("警告:订单项 " + (i + 1) + " 包含无效的商品索引 " + order[i][0] + ",已跳过。");
                continue;
            }

            String name = NAMES[itemIndex];
            double price = NETPRICES[itemIndex];
            int amount = order[i][1];
            double total = amount * price; // 计算总价

            // 打印订单详情
            System.out.println(name + " " + price + " " + amount + " " + total);
        }
    }

4. 完整代码示例

将上述所有部分整合,并加入 main 方法进行测试,得到完整的Java程序如下:

public class Ex1_19 {
    // 定义商品名称数组
    final static String NAMES[]= {"Spa reine 25 ","Bru plate 50","Bru pét 50",
            "Pepsi","Spa orange", "Schweppes Tonic","Schweppes Agr","Ice Tea","Ice Tea Pêche",
            "Jus d'orange Looza", "Cécémel", "Red Bull","Petit Expresso","Grand Expresso","Café décaféiné ",
            "Lait Russe ","Thé et infusions","Irish Coffee ","French Coffee ","Cappuccino","Cécémel chaud",
            "Passione Italiano","Amour Intense", "Rhumba Caliente ","Irish Kisses ","Cuvée Trolls 25",
            "Cuvee Trolls 50","Ambrasse-Temps 25","Ambrasse-Temps 50 ","Brasse-Temps Cerises 25",
            "Brasse-Temps Cerises 50","La Blanche Ste Waudru 25","Blanche Ste Waudru 50",
            "Brasse-Temps citr 25","Brasse-Temps citr 50","Spaghetti Bolo ","Tagl Carbonara",
            "Penne poulet baslc ","Tagl American","Tagl saum"};

    // 定义商品净价数组
    final static double NETPRICES[]= {2.2, 2.3,3.9,2.2,2.2,2.6,2.6,2.6,2.6,2.6,2.6,4.5,2.2,2.2,2.2,2.5,2.5,7.0,7.0,2.8,2.8,6.2,6.2,6.2,6.2,
                                        2.9,5.5,2.7,5.1,3.1,5.8,2.6,4.9,2.6,4.9,10.8,11.2,12.2,14.5,16.9};

    public static void main(String[] args) {
        // 示例订单数据
        // Order[i][0] 是1-based商品索引,Order[i][1] 是数量
        int Order[][]={{3,2},{1,3},{12,4},{37,1},{36,3},{0,0},{0,0},{0,0}, {0,0}};

        System.out.println("--- 订单预览 ---");
        previewOrder(Order);
        System.out.println("----------------");
    }

    /**
     * 预览订单详情,根据订单数组关联商品名称和价格,并计算总价。
     * 
     * @param order 二维数组,每行包含商品索引(1-based)和购买数量。
     */
    public static void previewOrder(int order[][]) {
        for (int i = 0; i < order.length; i++) {
            // 将1-based的商品索引转换为0-based
            int itemIndex = order[i][0] - 1;

            // 检查索引是否有效,防止数组越界
            // 索引必须大于等于0,且小于NAMES和NETPRICES数组的长度
            if (itemIndex < 0 || itemIndex >= NAMES.length || itemIndex >= NETPRICES.length) {
                // 如果订单项的商品索引为0,且数量也为0,可能表示订单结束或空行,可以忽略
                if (order[i][0] == 0 && order[i][1] == 0) {
                    continue; 
                }
                // 否则,打印警告并跳过
                System.err.println("警告:订单项 " + (i + 1) + " 包含无效的商品索引 " + order[i][0] + ",已跳过。");
                continue;
            }

            // 从对应的数组中获取商品名称和价格
            String name = NAMES[itemIndex];
            double price = NETPRICES[itemIndex];
            // 获取购买数量
            int amount = order[i][1];
            // 计算当前订单项的总价
            double total = amount * price;

            // 打印格式化的订单详情
            // 可以根据需要调整输出格式,例如使用DecimalFormat进行金额格式化
            System.out.printf("%-20s %.2f %d %.2f%n", name, price, amount, total);
        }
    }
}

示例输出:

--- 订单预览 ---
Bru pét 50           3.90 2 7.80
Spa reine 25         2.20 3 6.60
Red Bull             4.50 4 18.00
Tagl Carbonara       11.20 1 11.20
Spaghetti Bolo       10.80 3 32.40
----------------

5. 注意事项与总结

  • 索引一致性是关键: 在处理多个数组时,务必确保它们之间通过索引建立的关联是正确的。特别是在存在1-based和0-based索引混用的情况下,要进行明确的转换。
  • 数据验证不可少: 对来自外部或用户输入的数据进行有效性检查(如索引范围检查)是编写健壮代码的重要实践,可以有效避免运行时错误。
  • 命名规范: 变量和方法名应清晰、有意义。例如,Order 数组在Java中通常建议命名为小写开头的 order 或 orders。
  • 输出格式化: 使用 System.out.printf() 可以更灵活地控制输出格式,例如对浮点数进行精度控制和对齐。
  • 替代方案: 对于更复杂的场景,可以考虑使用对象(如 Product 类和 OrderItem 类)来封装相关数据,或者使用 Map 来建立商品ID到商品对象的映射,以提高代码的可读性和可维护性。然而,对于本教程所描述的简单场景,直接使用数组是有效且直接的解决方案。

通过以上步骤,我们成功地实现了利用多个数组协同处理订单数据的目标,并生成了清晰、格式化的订单预览。这个过程不仅展示了数组的基本操作,也强调了数据关联和错误处理在实际编程中的重要性。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

651

2023.06.15

java流程控制语句有哪些
java流程控制语句有哪些

java流程控制语句:1、if语句;2、if-else语句;3、switch语句;4、while循环;5、do-while循环;6、for循环;7、foreach循环;8、break语句;9、continue语句;10、return语句。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

454

2024.02.23

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

725

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

394

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

441

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

427

2023.08.02

笔记本电脑卡反应很慢处理方法汇总
笔记本电脑卡反应很慢处理方法汇总

本专题整合了笔记本电脑卡反应慢解决方法,阅读专题下面的文章了解更多详细内容。

1

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2万人学习

C# 教程
C# 教程

共94课时 | 5.3万人学习

Java 教程
Java 教程

共578课时 | 37.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号