Java 三元运算符语句上表达式的非法开始

Java 三元运算符语句上表达式的非法开始,java,if-statement,ternary-operator,Java,If Statement,Ternary Operator,我需要制作一个允许输入一年的程序,该程序需要告诉我们该年(我们在控制台上输入的)是否是闰年 可以除以4但不能除以100的年份是闰年。 可以除以400,也可以除以100的年份是闰年 我需要使用“if”命令进行流量控制和三元运算符 编译器提供了以下信息: public class V0206 { public static void main(String[] args) { java.util.Scanner sc = new java.util.Scanner

我需要制作一个允许输入一年的程序,该程序需要告诉我们该年(我们在控制台上输入的)是否是闰年

可以除以4但不能除以100的年份是闰年。 可以除以400,也可以除以100的年份是闰年

我需要使用“if”命令进行流量控制和三元运算符

编译器提供了以下信息:

public class V0206 {

    public static void main(String[] args) {

            java.util.Scanner sc = new java.util.Scanner(System.in);

            int x = sc.nextInt();
            int y = 400;
            int z = 100;
            int q = 4;
            int rest =(int)(x % y);
            int rest2 = (int)(x % z);
            int rest3 = (int) (x % q);

            String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year";);
            if (result = true) {System.out.println("Leap year");}
            else
            {System.out.println("Not leap year");
                }


    }
}
删除
;)最后一个
之前的字符

最后,您的代码应该如下所示:

String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year";
result
是一个字符串,不能与布尔值(
true
)进行比较。改用
equals
方法。请注意,
等于
区分大小写。它的coutterpart是
equalsIgnoreCase

  • 有一个额外的
    ;)在您的代码中

    字符串结果=(rest3==0&&rest2!=0 | | rest==0&&rest2==0)?“闰年”:“非闰年”

  • 我不确定你的逻辑是否正确。你应该这样做:-

    如果(结果等于(“闰年”)) System.out.println(“闰年”); 其他的 System.out.println(“非闰年”)

  • 应该解决两个问题:

    1) 删除要给出的额外分号

    public class V0206 {
    
        public static void main(String[] args) {
    
            java.util.Scanner sc = new java.util.Scanner(System.in);
    
            int x = sc.nextInt();
            int y = 400;
            int z = 100;
            int q = 4;
            int rest = (int) (x % y);
            int rest2 = (int) (x % z);
            int rest3 = (int) (x % q);
    
            String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0) ? "Leap year" : "Not leap year";
    
            // This if statement can be replaced by System.out.println(result);
            if (result.equals("Leap year")) {
                System.out.println("Leap year");
            } else {
                System.out.println("Not leap year");
            }
    
        }
    }
    
    2) 如果(result=true)
    ,则重构此行。这是试图将
    true
    分配给
    结果
    (这不会编译,您可能也指
    =
    )。但是不能将相等与这样的字符串进行比较:应该使用
    equals()
    contentEquals()

    我怀疑你想做的就是
    System.out.println(字符串)

    三个问题

  • 额外的
    ;)

  • 使用
    =
    运算符将字符串与布尔值进行比较

  • 结果的值将是
    闰年
    非闰年
    ,非
    “真”

    String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year");
    
  • 或者,您可以像这样进行微调

    String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year";
        if (result.equals("Leap year")) {
            System.out.println("Leap year");
            }
        else
        {
            System.out.println("Not leap year");
        }
    

    Hlo。首先检查基本错误。 试试下面的代码

     boolean result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? true: false;
                if(result){
                    System.out.println("Leap year");
                    }
                else
                {
                    System.out.println("Not leap year");
                }
    
    } }


    //一个错误,比如。。您添加了额外的分号。并检查字符串变量,如布尔变量

    使用括号明确你的意图。第15行有一个非法的括号。另外(但与主要问题无关),如果(结果==true){…}
    ,不要做
    if(结果){…}
    如果(结果=true)
    看起来不好,原因很多,比如赋值而不是比较,使用不正确的类型,并将结果与上一行中的“闰年”或“非闰年”进行比较。好的,删除括号和“;”这太过分了。仍然无法编译。@Pshemo我在代码中添加了一条注释,用于提及您的。。。评论。
     boolean result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? true: false;
                if(result){
                    System.out.println("Leap year");
                    }
                else
                {
                    System.out.println("Not leap year");
                }
    
    public class V0206 {
    public static void main(String[] args) {
    
    
    
        int x = sc.nextInt();
        int y = 400;
        int z = 100;
        int q = 4;
        int rest = (int) (x % y);
        int rest2 = (int) (x % z);
        int rest3 = (int) (x % q);
    
        boolean result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0) ? true
                : false;
        if (result == true) {
            System.out.println("Leap year");
        } else {
            System.out.println("Not leap year");
        }