
在许多实际应用中,数据往往分散存储在不同的结构中,需要通过关联才能形成完整的业务信息。本教程将以一个订单预览系统为例,展示如何利用java中的多个数组来协同处理数据。
我们有以下三种核心数据结构:
final static String NAMES[]= {"Spa reine 25 ","Bru plate 50", /* ... 其他商品名称 ... */};final static double NETPRICES[]= {2.2, 2.3, 3.9, /* ... 其他商品价格 ... */};int Order[][]={{3,2},{1,3},{12,4},{37,1},{36,3},{0,0},{0,0},{0,0}, {0,0}};我们的目标是编写一个方法,能够遍历 order 数组,根据其中的商品索引从 NAMES 和 NETPRICES 数组中获取相应信息,计算每个订单项的总价,并最终输出一个格式化的订单预览。
本场景中一个关键的挑战是 order 数组中存储的商品索引是 1-based(从1开始计数),而Java数组的索引默认是 0-based(从0开始计数)。这意味着,如果 order[i][0] 的值为 3,它实际上对应的是 NAMES[2] 和 NETPRICES[2]。
因此,在从 NAMES 和 NETPRICES 数组中获取数据时,我们需要对 order[i][0] 的值进行减一操作,以将其转换为正确的0-based索引。
立即学习“Java免费学习笔记(深入)”;
我们将创建一个名为 previewOrder 的静态方法,它接收 order 数组作为参数。该方法将负责遍历订单、查找商品信息、计算总价并打印结果。
我们将使用 for 循环来遍历 order 数组中的每一个订单项。
public static void previewOrder(int order[][]) {
// 遍历订单数组的每一行
for (int i = 0; i < order.length; i++) {
// ... 处理每个订单项的逻辑 ...
}
}在循环内部,首先进行索引转换,然后使用转换后的索引从 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];
// ... 后续计算和打印 ...
}
}在实际应用中,用户输入或数据源可能会包含无效的商品索引(例如,索引小于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);
}
}将上述所有部分整合,并加入 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 ----------------
通过以上步骤,我们成功地实现了利用多个数组协同处理订单数据的目标,并生成了清晰、格式化的订单预览。这个过程不仅展示了数组的基本操作,也强调了数据关联和错误处理在实际编程中的重要性。
以上就是Java中多数组协同处理订单:商品信息与数量的关联与展示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号