class A {
public static void main (String[] args) {
// code ...
System.out.println(B.fun1());
// code ...
}
class B {
// code ...
public int fun1(){
return C.fun2();
}
class C {
// code ...
public int fun2() {
int u = 0;
for(int k= 0; arr[k] != null ; k++,System.out.println("k="+k)) {
int a = arr[k].getVal();
String s = Integer.toString(a);
if (s.equals(("1"))) {
u = u + 10;
} else {
u = u + a;
}
}
return u;
}
}
我有一个与上面显示的结构相同的代码,当main
执行输出时:
k=1
k=2
k=3
u
中打印的来自fun1
的返回值main
是:
30 //depends on getVal()
但在此输出之后它也会显示此
k=1
k=2
k=1
k=2
k=1
k=2
我收到ArrayIndexOutOfBoundsException
。这怎么可能?
我的问题是为什么我得到这个k = 1 k = 2 k = 1 ...的事情
CODE:https://drive.google.com/open?id=1aZYv7qqYd1___fXA92lbtLO5WccI9wz6
如何重现:事情是随机的,所以尽量多玩几次。
答案 0 :(得分:1)
for(int k= 0; arr[k] != null ; k++,System.out.println("k="+k)) {
你对k的高度没有约束,而只是在你被发现为null之前进行评估。超出索引值将抛出IndexOutOfBoundsException而不是求值为空值,因此如果数组中没有空值,则总会遇到异常,除非出现其他一些打破循环的方式。为了防止这种情况,您可以检查以确保在进行空检查之前k在数组长度内。
for(int k= 0; k < arr.length && arr[k] != null ; k++,System.out.println("k="+k)) {
答案 1 :(得分:0)
原始代码为here
看看你的整个代码我猜测如何删除控制台输出中的额外数字,我做了一些改动,使你的代码更有效率。如果这是您问题的最终解决方案,请告诉我。
首先,我删除了循环中的System.out.Println(k)
,消除了控制台输出中的最后一个额外数字:
public int evaluateHand() {
int u = 0;
try {
for(int k= 0; hand[k] != null; k++) {
int a = hand[k].getRank();
String ok = Integer.toString(a);
if (ok.equals(("13"))) {
u = u + 10;
}else if (ok.equals(("12"))) {
u = u + 10;
} else if (ok.equals(("11"))) {
u = u + 10;
} else if (ok.equals(("1"))) {
u = u + 11;
} else {
u = u + a;
}
}