2 pk monkey pk_monkey 于 2017.09.16 15:19 提问

java i=i+2与i+=2的区别

import java.util.*;
public class lianxi {

public static void main(String[] args) {
    int N=3;
    int[][] a = new int[N][N];

    int i=0;   //行
    int j=N/2; //列
    a[i][j]=1;

    for(int n=2;n<=N*N;n++)
    {
        //往45度方向放下一个数字
        i--;
        j++;            

        if(i<0 && j>=N)//两边越界,//行和列都越界
        {
            i=i+2;
            j--;
        }
        else if(i<0)//行越界
        {
            i=N-1;
        }
        else if(j>=N) //列越界
        {
            j=0;
        }
        else if(a[i][j]!=0)  //有冲突
        {
            i=i+2;
            j--;
        }

        a[i][j]=n;
    }

    //输出
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            System.out.print(a[i][j] + "\t");
        }
        System.out.println();
    }
        }

}
结果是:
8 1 6

3 5 7

4 9 2

import java.util.*;
public class lianxi2 {

public static void main(String[] args) {
    int N = 3;
    int[][] a = new int[N][N];
    int i = 0;
    int j = N/2;
    a[i][j] = 1;
    for(int n=2;n<=N*N;n++){
            i--;
            j++;
            if(i<0 && j>=N){
                i+=2;
                j--;
            }
            else if(i<0){
                i=N-1;
            }
            else if(j>=N){
                j=0;
            }
            else if(a[i][j]!=0){
                i+=2;
                i--;
            }
            a[i][j]=n;
            }
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            System.out.print(a[i][j]+"\t");
            }
            System.out.println();
        }
    }

}
结果是:
7 1 5

3 4 6

0 8 9

7个回答

qq_40266990
qq_40266990   2017.09.16 20:06
已采纳

实际运用中没有区别,在运行效率中是有区别的,i=i+2操作中,先是读取左边i的地址,然后再次读取右边i的地址,i加2,然后把它赋值给左边的i;i+=2是只读一次i的地址,然后加2,再赋值到i。还有,你的代码上下有区别

yuanzeEcho
yuanzeEcho   2017.09.16 16:10

我实际中用的二者没有什么区别

yanqiuchu5017
yanqiuchu5017   2017.09.16 16:53

你这上下的代码不一样,不是i=i+2 和 i+=2的区别。
else if(a[i][j]!=0) //有冲突
{
i=i+2;
j--;
}
这个地方 一个是 j--; 一个是 i--;

pk_monkey
pk_monkey 谢谢
2 个月之前 回复
u012734723
u012734723 厉害!!!,这才是真正发现问题的人!
2 个月之前 回复
qq_40269884
qq_40269884   2017.09.16 16:21

区别就是+=有一个强制类型转换。不过都是int就没什么区别了;

m0_37548462
m0_37548462   2017.09.16 16:54

与C语言中的有相似性

github_38117599
github_38117599   2017.09.16 18:58

1.执行效率
2.类型转换
详细请看:http://biyutong.iteye.com/blog/1424087

sreddouilyongxia
sreddouilyongxia   2017.09.16 20:44

没区别 两种写法而已。

Csdn user default icon
上传中...
上传图片
插入图片