for循环在java中的行为不同
我有一个与上面所示结构相同的代码,当执行for循环在java中的行为不同,java,for-loop,output,Java,For Loop,Output,我有一个与上面所示结构相同的代码,当执行main时,输出为: 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 ...
main
时,输出为:
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
中的fun1
返回值u
为:
k=1
k=2
k=3
但在这个输出之后,它也显示了这一点
30 //depends on getVal()
我收到一个数组索引OutofBoundsException
。这怎么可能?
我的问题是为什么我得到这个k=1k=2k=1。。。事情
代码:
如何复制:事情是随机的,所以试着玩几次。原始代码是
通过查看您的整个代码,我猜到了如何删除控制台输出中的额外数字,并且我做了一些更改,使您的代码更加高效。让我知道这是否是你问题的最终解决方案
首先,我删除了循环中的System.out.Println(k)
,从而消除了控制台输出中的最终额外数字:
k=1
k=2
k=1
k=2
k=1
k=2
您对k可以达到多高没有任何限制,而是只在发现它为null之前进行计算。超出索引值将引发IndexOutfBoundsException,而不是计算为空值,因此,如果数组中没有空值,除非以其他方式中断循环,否则将始终遇到异常。为了避免这种情况,您可以在执行null检查之前检查以确保k在数组长度内
for(int k= 0; arr[k] != null ; k++,System.out.println("k="+k)) {
for(int k=0;k
请创建一个我们可以运行以复制该问题的。这可能是因为arr[k]!=null
arr[k]!=null
索引越界在大多数语言中都会导致错误,因为您必须首先获取arr[k]
在进行比较之前。如果k索引超出范围,则会出错。正如@AniketSahrawat提到的,您没有检查(…;arr[k]!=null;…)的中是否超出了数组限制。
是什么阻止k
超过数组大小的?请尝试检查是否超出了数组长度(…;k
类似于arr[0]=null;arr[1]=null;…当我调用它时,它会更新为arr[0]=10;arr[1]=7;arr[2]=null,arr[3]=null…我还尝试将k限制为数组大小的最大值,如..(int k=0;arr[k]!=null&&ki通过添加i尝试了它。您可以发布整个代码吗?这可能会帮助我们找到解决方案。@AnshulSingh成功了吗?在这里is@AnshulSingh好的,我几分钟后回来。我知道,而且我在之前的评论中说过很多次它都不起作用。然后你必须在循环定义之外修改k,导致它不起作用o行为异常。这确实不是推荐的做法。它是一个局部变量。此变量仍然可以在循环体中修改。无论如何,如果在循环定义中对数组长度有适当的约束,则在该行上永远不会出现越界异常。结果{1,2,1,2,…}表示修改索引跟踪值或循环连续运行多次-在这种情况下,很可能是显而易见的问题:多个数组中的一个数组不包含空值,因此无法正确终止一个循环。同样,使用正确的循环约束应该完全可以避免这种情况。代码不存在了,为什么不自己检查它呢?:-)
for(int k= 0; arr[k] != null ; k++,System.out.println("k="+k)) {
for(int k= 0; k < arr.length && arr[k] != null ; k++,System.out.println("k="+k)) {