开发者社区> 问答> 正文

java算法研究,在线等:配置报错 

 我有4个仓库,分别是A、B、C、D,假设我要从仓库拿N个商品,我先判断ABCD仓库够不够,如果不够则操作无效,然后再判断A是否少于等于N(A仓库不够库存),如果是那么再判断B仓库( 以此类推),否则(A仓库满足N个库存),直接计算

我把这个demo写出来了

也能正确达到我预期目的

但如果有10个仓库,我不能这样一直判断下去吧。

请问各位大哥,有没有什么好方法呢?

if (autoAount >= i) {
			this.setAutoAount(this.getAutoAount() - i);
		}else {
			//少于i,需要重新计算
			int iauto = 0;
			iauto = i - this.getAutoAount();
			this.setAutoAount(0);
			if (softAount >= iauto) {
				this.setSoftAount(this.getSoftAount() - iauto);
			}else {
				//少于iauto,需要重新计算
				int isoft = 0;
				isoft = iauto - this.getSoftAount();
				this.setSoftAount(0);
				if (halfAount >= isoft) {
					this.setHalfAount(this.getHalfAount() - isoft);
				}else {
					//少于isoft,需要重新计算
					int ihalf = 0;
					ihalf = isoft - this.getHalfAount();
					this.setHalfAount(0);
					if (handAount >= ihalf) {
						this.setHandAount(this.getHandAount() - ihalf);
					}else {
						//少于ihand,需要重新计算
						//还少于的话,说明出错。
						PacketData pd = new PacketData();
						pd.setTypeData(PacketData.Game_packet_jiaohuogeikehu_Server_fail_error);
						myUtil.sendtopacket(pd, oos);
					}
				}
			}
		}

展开
收起
kun坤 2020-05-31 22:09:22 577 0
1 条回答
写回答
取消 提交回答
  • 引用来自“cobbage”的答案

    你把你所谓的仓库放到数组或者集合里面啊  放的时候按照你要求排个序  遍历够要求就行了
    谢谢,我也为了其他朋友,先用hashmap把仓库放在一齐,然后遍历这个hashmap,以此判断减去需要拿出来的商品,如果拿够了,就break。否则继续遍历下去。 ######遞歸######用list存放仓库,然后遍历list######为什么要一层层if...else...? 直接判断ABCD总库存够不够,够了就开始挨个取,有多少取多少,直到取满你想要的数。 ###### 你把你所谓的仓库放到数组或者集合里面啊  放的时候按照你要求排个序  遍历够要求就行了 ######排除,比如我先拿出所有仓库,数据包括仓库编号和商品数,先排除商品数量小于N的仓库,剩下的仓库也就都满足了,不知道你是不是这个意思。还有就是你没发现你现在代码很多重复么,独立出来递归。######计算总数的时候就排序咯。排完就调货咯。哈。
    2020-05-31 22:09:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载