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


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");
                }

    }
}

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

可除以 4 且不可除以 100 的年份为闰年。年份可除以 400,也可除以 100 IS 闰年。

我需要使用"if"命令进行流控制和三元运算符。

编译器给出这个:

V0206.java:15: error: illegal start of expression
            String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year";);
1 error
Compilation failed.
String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year";

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

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

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");
        }
    }
}

result 是一个字符串,它不能与布尔值 ( true ) 进行比较。请改用equals方法。请注意,equals区分大小写。它的外衣是equalsIgnoreCase .

三个问题

  1. 三元运算中的额外;)

  2. 将字符串与布尔值与运算符进行比较==

  3. 结果的值将是Leap yearNot leap year,而不是"true"true

    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");
        }
    

或者,您可以像这样进行位微调,

 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");
            }
<</div> div class="one_answers">

两个问题:

1)去掉多余的分号给

String result = (rest3 == 0 && rest2 != 0 || rest == 0 && rest2 == 0 ) ? "Leap year" :  "Not leap year");

2) 重构此行if (result = true)。这是尝试将true分配给result(这不会编译,您可能也意味着==)。但是你不能将相等性与这样的字符串进行比较:你应该改用equals()contentEquals()

我怀疑你想做的只是System.out.println(string);

  1. 代码中有一个额外的;)

    字符串结果 = (rest3 == 0 && rest2

    != 0 || rest == 0 && rest2 == 0 ) ?"闰年":"非闰年";

  2. 我不确定你的逻辑是否正确。你应该做这样的事情:-

    if (result.equals("闰年")) System.out.println("Leap year");还 System.out.println("Not leap year");

应该做这项工作

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

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");
    }

} }

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

最新更新