当前位置: 首页 > 知识库问答 >
问题:

无限循环java[duplicate]

夏涵畅
2023-03-14

你好,有人能解释一下为什么这会形成一个无限循环吗?谢谢!

    public static void main(String[] args) {
        int x = 5;
        int y = 10;
        
        while (x < y) {
            x = getX(x);
        }

    }// end main
    
    public static int getX (int x) {
        
        x = x++;
        
        return x;
    }

共有3个答案

魏鸿禧
2023-03-14

删除对x的赋值

您可以简单地做:

public static int getX (int x) {
    x++;
    return x;
}
养聪
2023-03-14

改变x=x asx=x

章安易
2023-03-14

x是一个表达式。表达式为“已解决”(已计算);换句话说,它们分解成一个值。例如,表达式5 2,如果解析,将解析为值7

x是一个有点奇怪的表达式;它有副作用。它不仅仅是计算,解析它的行为本身会导致事情发生。因此,它做了两件事:它解析成一个值,并导致其他事情也发生。

具体来说,x的意思是:返回x的当前值。但是,作为一个副作用,增加x(但是,这个表达式的值是x,与增加它之前的值相同)。

x=someExpr是java ese for:解析表达式someExpr,然后将x设置为计算值。

因此,x=x是你永远不想写的愚蠢代码。假设当我们开始时,x是5,那么:

  • 首先,我们“解析”x,这意味着值将是5
  • 但在我们实际完成之前,递增x。x现在保存值为6,但表达式的值为5。
  • 现在用表达式的值覆盖x持有的任何,即5。

因此,x是。。。还是5岁。

如果你想增加x,仅此而已,只需:

public static int getX(int x) {
  x++;
  return x;
}

或者更简单:

public static int getX(int x) {
  return x + 1;
}

是你想要的。

 类似资料:
  • 问题内容: 请看下面的Java 无限循环。它导致其下面的语句的编译时错误。 以下相同的无限循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。 同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量为true,但编译器根本没有抱怨。为什么? 编辑:显然,以下版本的卡在无限循环中,但是即使循环中的条件始终存在,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循

  • 你好,有人能解释一下为什么这会形成一个无限循环吗。谢谢

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类

  • 问题内容: 我想实现一个过滤器来执行身份验证,但是不知何故它陷入了无限循环中……任何想法都值得赞赏。 调试模式下的这段代码仅无限次运行,基本上,我想在用户未登录时将其重定向到login.jsp。任何答复表示赞赏。 问题答案: 这里, 您将向目标页面发送 新的 HTTP请求,而不是使用当前请求。如果此新的HTTP请求被映射到过于通用的网址格式(例如),则当然会再次点击过滤器。并且将执行相同的检查,并

  • 基本上,findNode()搜索其数据等于作为参数插入的字符串的节点,但当我调用outputList()方法(该方法返回屏幕上当前节点的字符串表示)时,它将继续无限循环。 outputList方法是: 如有任何帮助,我们将不胜感激。提前道谢。