中易网

java软件开发面试题

答案:2  悬赏:0  
解决时间 2021-04-07 23:41
题目2:合并托盘 现已定义好托盘(class Tray)、商品(Goods)的结构,其中一个托盘可以包含1个或多个商品,商品由ID、数量组成。 请将相同的托盘(托盘ID相等),同一个托盘内,请将相同的商品合并(商品ID相等时,数量相加)。 例如现有结构 Tray_0: (Goods_1, 2), (Goods_2, 1), Tray_1: (Goods_2, 2), Tray_0: (Goods_1, 1), (Goods_3, 1), 调用result = mergeTrays(trays);方法后,合并后的结果放入result对象,结果应当为 Tray_0: (Goods_1, 3), (Goods_2, 1), (Goods_3, 1), Tray_1: (Goods_2, 2), 请补充MergeTrays类中的mergeTrays方法(在TODO注释中),实现相同托盘及相同商品的合并。 注意:合并后的托盘顺序不重要,商品顺序不重要,保证商品种类、数量正确即可。 import java.util.ArrayList; import java.util.List; import java.util.Random; public class MergeTrays { static class Tray { int id; List<Goods> goods; } static class Goods { int id; int count; } private static final int MAX_TRAYS = 10; private static final int MAX_TRAY_ID = 6; private static final int MAX_GOODS = 3; private static final int MAX_GOODS_ID = 10; private static final int MAX_GOODS_COUNT = 3; public static void main(String[] args) { List<Tray> trays = genTrays(); printTrays("原始数据", trays); List<Tray> result = mergeTrays(trays); printTrays("处理结果", result); } private static List<Tray> genTrays() { List<Tray> trays = new ArrayList<>(); for(int i = 0; i < MAX_TRAYS; ++i) { Tray tray = genTray(); trays.add(tray); } return trays; } private static Random rnd = new Random(); private static Tray genTray() { Tray tray = new Tray(); tray.id = rnd.nextInt(MAX_TRAY_ID); tray.goods = genGoods(); return tray; } private static List<Goods> genGoods() { List<Goods> result = new ArrayList<>(); int goodsSize = rnd.nextInt(MAX_GOODS) + 1; for(int i = 0; i < goodsSize; ++i) { Goods g = new Goods(); g.id = rnd.nextInt(MAX_GOODS_ID); g.count = rnd.nextInt(MAX_GOODS_COUNT) + 1; result.add(g); } return result; } private static void printTrays(String title, List<Tray> list) { System.out.println(title); for(Tray t : list) { if(t == null) continue; System.out.print("\tTray_" + t.id + ": "); if(t.goods != null) { for(Goods g : t.goods) { if(g == null) continue; System.out.print("(Goods_" + g.id + ", " + g.count + "), "); } } System.out.println(); } System.out.println(); } private static List<Tray> mergeTrays(List<Tray> list) { //TODO 请补充代码 return list; } } 各位大神怎么破呢
最佳答案
List<Tray> list2 = new ArrayList<Tray>();
for (Tray tray : list) {
// 合并自身商品 id 相同的托盘上的商品

List<Goods> gList0 = new ArrayList<Goods>();
for (Goods good : tray.goods) {
boolean flag = false;
for (Goods g0 : gList0) {
if (g0.id == good.id) {
g0.count += good.count;
flag = true;
}
}
if (!flag) {
gList0.add(good);
}
}
tray.goods = gList0;

// 合并托盘id 相同 的的商品
Tray t0 = null;
for (Tray tray2 : list2) {
if (tray2.id == tray.id) {
t0 = tray2;
break;
}
}
if (t0 == null) {
list2.add(tray);
} else {
for (Goods good : tray.goods) {
boolean flag = false;
for (Goods g0 : t0.goods) {
if (g0.id == good.id) {
g0.count += good.count;
flag = true;
}
}
if (!flag) {
t0.goods.add(good);
}
flag = false;
}
}
t0 = null;
}
list = list2;
全部回答
应届生开始都要先笔试的了,这当然就是一些和java相关的知识了。 笔试通过后, 第一个面试的是人事,就会问一些常见的个人问题而已,与专业无关。 过了关之后会有技术人员面试问一些 相关技术,也不会多难的。 只要你平时真的用心学了,也老老实实做了那些大的编程作业。那就有不错的基础了,找工作不是什么难事。如果平时根本没学,那就麻烦了。还好现在才10月,不是要做毕设吗,自己认真做,在做的过程中不断学习提高。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问做在男衬衫衣领里面的那个用熨斗一熨可以
阳城县职工活动中心地址有知道的么?有点事想
焦作市解放区老理工大在哪办暂住证?
桃树能盆栽吗?需要注意哪些问题?
草莓部分烂后用开水洗后可以吃吗?
2012年最好玩的网页游戏??
如图,DE‖BC,CD是∠ACB的平分线,∠B=60°,∠A
53度茅台迎宾酒 酱香型白酒多少钱
兴化李从德夫人叫什么名字
飞科刀头fr8和fr6怎么不一样了
怎么办淘宝信用卡和会员卡
周大福解放路民生珠宝专营店在什么地方啊,我
王者荣耀版本改了怎么没有了符文分解制作
大连天途微信怎么缴费
梦幻西游手游60级可以带吸血鬼吗
推荐资讯
在房间能听见外面水声,特别是水管的声音,为
有没有让人看了忍不住要流泪的电影?
我很____ 小学生半命题作文..急!!!!!!
德宝平价真皮专卖店地址有知道的么?有点事想
若 宫 丽 娜 种子合集
科三路考时如不是在起点起车,一圈回来时在那
海华景园艺有限公司地址在什么地方,想过去办
推荐一款适合学生用的性价比高有个性的千元机
从一个银行辞职很久,又想再回去,可行吗?
吃一片安眠药多久后就睡?吃半片的效果如何呢
榨蔬菜汁后菜渣怎么处理
乐平市财政局我想知道这个在什么地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?