2013-12-19 32 views
0
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. 
+2

使用括號使您的意圖清晰。 – Stephan

+4

第15行有一個非法支架。 – Caadi0

+2

另外(但與主要問題無關),不要執行if(result == true){...}',只要執行if(result){...} '。 –

回答

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區分大小寫。其couterpart是equalsIgnoreCase

+0

@Pshemo我在代碼中添加了一條評論,提及您的評論。 – Stephan

+0

就是這樣:)謝謝。 – jutreni

+1

@jutreni不客氣。不要忘記標記爲已接受您選擇的答案。 ;) – Stephan

2
  1. 。在你的代碼的額外;)

    字符串結果=(rest3 == 0 & & rest2!= 0 ||其他== 0 & & rest2 == 0)? 「閏年」:「不閏年」;

  2. 我不確定你的邏輯是否正確。你應該這樣做: -

    if(result.equals(「Leap year」)) System.out.println(「Leap year」); else System.out.println(「Not leap year」);

應該做的工作

2

兩個問題:

1)刪除多餘的分號給

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

2)重構這一行if (result = true)。這是嘗試轉讓trueresult(這不會編譯,你可能也意味着==)。但是您無法將平等與以下字符串進行比較:您應該使用equals()contentEquals()代替。

我懷疑你想要做的是System.out.println(string);

2

三個問題

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

非常感謝您指導適當的格式化。 – jutreni

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

}}

//一個錯誤一樣..你已經添加了額外的分號。並像布爾變量一樣檢查字符串變量。