Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环在java中的行为不同_Java_For Loop_Output - Fatal编程技术网

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)) {