在三元运算符声明中非法开始表达

时间:2013-12-19 12:18:08

标签: java if-statement ternary-operator

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个IS闰年。 可分为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.

5 个答案:

答案 0 :(得分:5)

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)

  1. 您的代码中还有一个;)

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

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

    if(result.equals(“闰年”))         System.out.println(“闰年”); 其他         System.out.println(“非闰年”);

  3. 应该做的工作

答案 2 :(得分:2)

两个问题:

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

答案 3 :(得分:2)

三个问题

    三元操作中的
  1. 额外;)

  2. 将String与布尔值与==运算符

  3. 进行比较
  4. 结果的值可以是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");
        }
    
  5. 或者,您可以像这样进行微调,

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

答案 4 :(得分:1)

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

}    }

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