Java 爪哇语&&&引用;操作员的行为非常奇怪

Java 爪哇语&&&引用;操作员的行为非常奇怪,java,Java,我正在尝试通过java打印一个模式。我使用for循环和条件语句,但是&&运算符存在一些问题。我不明白为什么我的代码表现得很奇怪。下面是我的代码 public class Test{ public static void main(String ar[]){ for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ if((i!=0 && j!=0)){ Sys

我正在尝试通过java打印一个模式。我使用for循环和条件语句,但是&&运算符存在一些问题。我不明白为什么我的代码表现得很奇怪。下面是我的代码

public class Test{
public static void main(String ar[]){
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            if((i!=0 && j!=0)){
                System.out.print("*");
            }else{
                System.out.print(" ");
            }
        }
        System.out.println();
    }
}
}

以上输出与我的预期完全不同。第1行没有打印为什么?我只想跳过(i=0和j=0)位置的元素。

让我们看看会发生什么:

对于第1行,您得到
i
=0和
j
=0到4,因此您将得到5个空格(因为
i=0
的结果总是
false
)。 对于所有其他行
i
is!=0和
j
仍然是0到4,因此得到1个空间和4颗星

如果将打印的空格更改为下划线,则会得到以下输出:

_____     
_****
_****
_****
_****
我只是想跳过(i=0和j=0)位置的元素

当前,您正在跳过所有没有任何索引为0的元素(
i!=0&&j!=0
转换为“
i
不是0,
j
不是0”)


如果您只想跳过这一个元素,那么您需要将表达式更改为
If(i==0&&j==0){skip}
If(!(i==0&&j==0)){do_anywhere_您需要的}
,其中第二个表达式转换为“如果不是,那么
i
j
都是0”(请注意,这意味着其中一个可以是0,只有两者的组合满足条件)。

打印第1行,但它使用空格打印


原因是您正在检查
(i!=0&&j!=0)
。在外循环的第一次迭代中,
i
为0,因此控件转到else块。

第一行打印空白,正如我在注释中添加的那样,因为此时,
i==0
并打印它4次,但第二次、第三次和其他尝试将首先打印
,因为将等于零
j==0
在这四个
*

for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
        if((i!=0 && j!=0)){
            System.out.print("*");
        } else {
            System.out.print(" "); //THIS IS PRINTING THE FIRST LINE
        }
    }
    System.out.println();
}

用于(inti=0;i在第一行
i=0
中,因此在i控件的第一次迭代中转到else部分,在第一行中,空格被打印而不是星号。在i第一次迭代中,索引j=0
的每一次迭代中,else部分再次执行,在第一列中,空格被打印而不是星号。在所有其他地方,星号是p打印的

public class Test{

    public static void main(String ar[]){
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                if((i!=0 && j!=0)){
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

}
公共类测试{
公共静态void main(字符串ar[]{

因为(inti=0;i布尔代数说!a&&!b==!(a&| b)。你是想说!a&&!b==!(a&&b)

你的测试

if((i!=0 && j!=0))
相当于

if(!(i==0 || j == 0))
根据您的最终陈述,这不是您想要的:“我只是想跳过(I=0和j=0)location的元素。”

因此,你可以用几种方法来改变你的测试。第一种方法可能是最简单的——反转块。这种方法操作最少,也最容易理解

if (i==0 && j==0)
    System.out.print(" ");
else
    System.out.print("*");
或者,如果您想保持顺序,请更改if语句。要反转(i==0&&j==0)的要求:!(a&&b)==(!a | |!b)


第1行没有打印
你是什么意思?第1行充满了空格。你想要和要做的具体操作是什么?你知道和和和之间的区别吗?看看这个线程:如果你想用另一个字符交换空格,你可以很容易地想出解决方案。你期望什么模式?这不完全正确ct.
j
将递增,但
i
仍为0。这就是它到达else分支的原因。
if (i==0 && j==0)
    System.out.print(" ");
else
    System.out.print("*");
if( (i!=0) || (j!=0) )
    System.out.print("*");
else
    System.out.print(" ");