请问这个代码if下面无法输出 编译没有问题

import java.util.Scanner;
public class Lily01{
    public static void main(String[]args){
        
        System.out.println("请输入一个三位数整数");
        Scanner sc=new Scanner(System.in);
        
        int li=sc.nextInt();
        int li01=li;
             
    if(li01>=1000&&li01<100){
           System.out.println("输入有误");
    }else if(li01<1000&&li01>=100){    

         int g=li01%10;
         int s=li01/10%10;
         int b=li01/10/10%10;
             
           if(li01==g*g*g+s*s*s+b*b*b){
            System.out.println(li01+"是水仙花数");
            }else{
            System.out.println(li01+"不是水仙花数");
            }    
        }                
    }
}

1.首先规范命名,方便读

2.li01>=1000&&li01<100 检查这个条件是否存在逻辑问题

3.代码可读性很重要

         int g=li01%10;
         int s=li01/10%10;
         int b=li01/10/10%10;

li01>=1000&&li01<100因为这个条件不可能满足,应该是||

import java.util.Scanner;

public class Lily01 {
    public static void main(String[] args) {
        System.out.println("请输入一个三位数整数");
        Scanner sc = new Scanner(System.in);

        int li01 = sc.nextInt();//li除了赋值给li01外没有其他用途,可以去掉

        if (li01 >= 1000 || li01 < 100) {//这个是或,不是与,小于100和大于1000不可能同时成立
            System.out.println("输入有误");
        } else { //这个可以不用else if,因为上面的条件不满足,剩下的只有(li01<1000&&li01>=100)的情况了

            int g = li01 % 10;//个位
            int s = li01 / 10 % 10;//十位
            int b = li01 / 10 / 10 % 10;//百位,li01/10/10%10或者li01/100

            if (li01 == g * g * g + s * s * s + b * b * b) {
                System.out.println(li01 + "是水仙花数");
            } else {
                System.out.println(li01 + "不是水仙花数");
            }
        }
    }
}

 

第一个判断条件是或者,不是且啊,判断条件注意一下