Java 令人困惑的缩进,为什么以及如何发生

Java 令人困惑的缩进,为什么以及如何发生,java,if-statement,warnings,indentation,Java,If Statement,Warnings,Indentation,这实际上不是一个需要解决的问题,但我很好奇为什么下面的代码会给出令人困惑的缩进警告,提示可能缺少周围的块: if(x!=y) System.out.println("not equal"); index++; 如果我把System.out.println(“不相等”)内部{}警告将消失,但我很好奇当前外观的代码在什么情况下会出错 问题是,当您阅读此代码时,您缺少一个视觉提示,System.out.println(“不相等”)。缩进代码时,错误也会消失: 如果(x!=y) System.out

这实际上不是一个需要解决的问题,但我很好奇为什么下面的代码会给出
令人困惑的缩进
警告,提示可能缺少周围的块:

if(x!=y)
System.out.println("not equal"); 
index++;

如果我把
System.out.println(“不相等”)内部
{}
警告将消失,但我很好奇当前外观的代码在什么情况下会出错

问题是,当您阅读此代码时,您缺少一个视觉提示,
System.out.println(“不相等”)(x!=y)
为真时,才会运行code>。缩进代码时,错误也会消失:

如果(x!=y)
System.out.println(“不相等”);

有些人可能仍然建议不要使用单行结果,并鼓励您无论如何使用块。人们可能只是想在
System.out
下面添加另一行代码,以为它也会在
x!=y
-没有注意到大括号丢失。

为清晰起见,if语句中的任何内容通常都缩进。例如:

if(foo) {
    if (bar) {
       System.out.println("foo bar");
    }
}
由于您只编写一行语句,因此不需要
{}
,但仍建议使用缩进。没有它,什么会被执行,什么不会被执行,这一点就不明显了

例如,如果阅读代码的人不知道在没有括号的if语句中只执行了1行get,他们可能会认为
index++(x!=y)


另外,如果您没有对所有if语句使用
{}
,那么作为开发人员,您更可能犯错误。如果您养成了不使用它们的习惯,并且忘记将它们用于多行If语句,您将得到意想不到的结果。例如,如果您决定在
System.out.println(“notequal”)之后放置一些内容
在if块中,很容易忘记
{}

它很容易混淆,因为
System.out.println
index++
行具有相同的缩进,但一个是
if
语句的一部分,另一个不是。@但是这与,在某些情况下,我们得到了错误的结果?例如,条件不满足,然后第三行不执行,而它应该执行?警告是告诉您代码难以阅读,而不是它无法工作。它可能不会像读者所期望的那样,因为缩进是误导性的。天哪,我不知道一个简单的空白意味着那么多。这仅仅是对代码可读性的警告还是什么?是的,并且给你一个警告,这段代码可能由于误读代码而容易出现问题。正如我所说的,如果您添加了另一行,但没有注意到大括号丢失,那么您的程序将无法按预期运行。这确实发生在我身上的次数比我敢承认的要多。可读性和bug预防。但是它是如何产生bug的呢?如果条件不满足,那么将执行第二行(这是我的意图)。事实上,空白是如何产生缺陷补救措施的?想象一下,这行代码是不同的,而不是
系统。out
如果(x!=y)
c++,您会得到类似
if(x!=y)
c++当出现需要修复的错误时,您已经有半年没有编辑代码了。因此,您可以添加一些日志消息来帮助您。但是你承受了很大的压力,你只是浏览了一下代码,所以你最后写了:
if(x!=y)
logger.log(“x不等于y时执行”)
c++你犯了一个错误,当然,你只是添加了一个bug。但是如果没有视觉提示,很容易忽略需要添加大括号才能正常工作。