Java【细节问题】

1.变量不可以被重复声明

java public class test1 { public static void main(String[] args) { int[] nums = {2, 4, 6, 7, 8, 9}; Arrays.sort(nums); int sum = 0; for (int i = nums.length - 2; 0<= i && i< nums.length - 1; i-= 2) { int b=2; int b=3; // 此时会报错,b has been declared sum+=nums[i]; // 如果上面没有声明int sum=0会报错 // 相当于sum=sum+nums[i]没有初始化怎么行?那我这样声明int sum+=nums[i]也会报错 // 相当于int sum=sum+nums[i],左边都没有初始化,当然报错。那我这样声明 int sum=int sum+nums[i] 也是没有初始化 // 反正记得 局部变量 初始化就不会报错 } System.out.println(sum); } }

2.自加自减(Python习惯)

习惯了Python里面i+=2这种写法,其实Java里面也是可以的。但是一种情况要注意,局部变量(此时i)应该提前初始化,全局变量(成员变量)。
局部变量不初始化一定会报错!!!
注意a++和++a的区别,前者是先操作后赋值

3.连用判断符(Python习惯)

0<i<2这种表示方法会报错,Operator ‘<’ cannot be applied to ‘boolean’, ‘int’.因此从左到右,0<1已经是逻辑判断的结果非true则false,这个boolean不可以和2这个Int做比较。因此可以用0<i&&i<2.

4.&&和&,||和|

一般习惯用&&和II,作用是一模一样的,只不过操作机制不一样。
0>2&&(balalaad),当前面是false不管后面怎么样也不会执行,因为被短路了
java public static void main(String[] args) { int i = 23; int j = 21; if ((i == j) && (100 / 0 == 0)){ //虽然IDEA会黄色警告,但是不会报错,可以执行得到21.如果换成&编译不会报错,但是执行后会报错,"/ by zero" System.out.println(j); } System.out.println(j);
||同理,前面true后面就不执行了

5.if循环条件里面的变量

今天做了一个力扣题,出现了一些变量的问题

class Solution {
    public int[][] generateMatrix(int n) {
        // 参考https://leetcode.cn/problems/spiral-matrix-ii/solution/spiral-matrix-ii-mo-ni-fa-she-ding-bian-jie-qing-x/
        int l=0 ,r=n-1,t=0,b=n-1;
        int[][] mat=new int[n][n];
        if(n==0) return mat;
        int target=n*n;
        int count=1;

        while(count<=target){
            // for(;l<=r;l++) mat[t][l]=count++;  //从左到右
            // t++;
            // for(;t<=b;t++) mat[l][t]=count++;  //从上到下
            // r--;
            // for(;r>=l;r--) mat[t][r]=count++;  //从左到右
            // b--;
            // for(;b>=t;l++) mat[t][l]=count++;  //从左到右
            // l++;
            // 绝了,别把几个边界放循环里面啊,因为你在外面定义了的话,即使放循环里面还是会发生值的变化
            // 在循环条件里面定义的变量,循环结束之后会失效,需要重新定义
            for(int i=l;i<=r;i++) mat[t][i]=count++;  //从左到右
            t++;
            for(int i=t;i<=b;i++) mat[i][r]=count++;  //从上到下
            r--;
            for(int i=r;i>=l;i--) mat[b][i]=count++;  //从右到左
            b--;
            for(int i=b;i>=t;i--) mat[i][l]=count++;  //从下到上
            l++;
        }
        return mat;

    }
}

5.1 当在循环外定义了一个变量,然后放在循环条件里面做++,最后循环外输出结果会因为循环条件里面的++而改变

public class test1 {
    public static void main(String[] args) {
        int l=0;
        int r=3;
        for(;l<=r;l++) ; 
        // 输出结果4
        System.out.println(l);
    }
}

5.2 当在循环内定义变量,那么此变量只在循环体里面有效,不可以在循环外用。

public class test1 {
    public static void main(String[] args) {
        int r=3;
        for(int l=0;l<=r;l++) ;
        // 报错:java: 找不到符号
        System.out.println(l);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值