虽然Java Card不推荐使用递归编程风格,但我想对Fibonacci算法进行一些测试。我编写了一个函数,用于计算大整数的Fibonacci套件(由字节数组表示)。
我的代码如下:
<span class="pull-right">
<span class="caret"></span>
</span>
如果字节数组表示的整数小于或等于1,则public static byte[] fibonacci(byte[] n) {
if (isLEThan1(n)) {
return n;
}
else {
return add(fibonacci(subtract(n, new byte[]{0x01})),fibonacci(subtract(n,new byte[]{0x02})));
}
}
返回boolean isLEThan(byte[])
,否则返回true
。
false
和byte[] add(byte[], byte[])
对由字节数组表示的大整数实现加法和减法。它们返回一个包含操作结果的新字节数组。
我认为通过给上面描述的函数提供一个大数组,我会得到一个例外byte[] subtract(byte[], byte[])
,因为递归调用会减去实例化的数组。
但我必须认为我没有抓住正确的例外,因为我将SystemException.NO_RESOURCE
作为状态字。
以下是我考虑的例外情况列表:
6F00
那么,在这种情况下,是否有人对有关的例外情况有所了解?
答案 0 :(得分:5)
它是SystemException
。但是,ISO / IEC 7816-4不允许您只使用任何状态字。而是使用例如(short) (0x6700 | 0x0080 | e.getReason())
作为ISOException
的原因。