leetcode

【LeetCode】292. Nim Game

问题链接:https://leetcode.com/problems/nim-game/ 尼姆游戏,一堆石子放在桌子上,两个人轮流拿,一次可以拿1-3颗石子,谁拿走最后一颗谁就赢了。 如4颗石子时,先手无论拿几颗,都会输了博弈,因为他至少得拿1颗,剩下的就是3颗,后手可一次全拿获胜。所以如果一堆石子放在桌子上,如果轮到这个人的时候面对的是4颗石子,那他肯定输,而另一个人肯定赢。 代码: public boolean canWinNim(int n) { return !(n%4==0); }

  • liaojl
1 min read
设计模式

Java动态代理的异常处理问题

今天在使用Java动态代理时出现了一个很棘手的问题,实现类里抛出了一个自定义异常,但外面捕获不到。 虽然使用printStack可以输出调试信息,但通过getMessage获取不到提示,因为项目需求是捕捉到同一种自定义异常的不同异常情况,通过getMessage获取异常提示反馈给用户,但因为使用了动态代理所以出现了异常捕获不到的情况。 具体原因是因为我们通过动态代理最终捕获到的异常时经过加工了的,也就是捕获的已不再是最开始我们希望抛出的异常,加工抛出的异常有两种: java.lang.reflect.UndeclaredThrowableException java.lang.reflect.InvocationTargetException 经过实验,最终的解决办法为: 在动态代理的方法执行时捕获异常,然后抛出exception.getCause() 这样,就能抛出你所希望抛出的那个异常里。 try{ method.invoke(fun, args); } catch(Exception

  • liaojl
1 min read

Subscribe to 技术博客

2693491512@qq.com