簡體   English   中英

冒號預期錯誤,冒號? 不是分號?

[英]colon expected error, colons? not semicolons?

代碼:

import ------.*;
public class Assignment2 {

  enum Picture {BACKGROUND, LEGS, BILL, BODY, EYE}

  public static void main (String [] args) {
    //Constants
    final int SIDE = 130;
    final int SCALE = 2;

    //The array
    Picture [][] duck = new Picture [SIDE][SIDE];

    //Read in the informations
    EasyReader input  = new EasyReader("duck.txt");
    for (int r = SIDE-1; r >=0; r--) //top row first
      for (int c=0; c<SIDE; c++)  {
        int i = (int)input.readChar();
        if  ( i % 2 == 0  )
          if  ( i % 22 == 0  )
            duck[r][c] = Picture.EYE;
          else
            duck[r][c] = Picture.BACKGROUND;
          else if ( i % 7 == 0  )
            duck[r][c] = Picture.BILL;
          else if ( i % 5 == 0  )
            duck[r][c] = Picture.LEGS;
          else
            duck[r][c] = Picture.BODY;
      }

    //Display it
    EasyGraphics window = new EasyGraphics(SIDE*SCALE*2,SIDE*SCALE*2);
    //sky
    window.setColor(100, 200, 255);
    window.fillRectangle(0,SIDE*3,SIDE*SCALE*2,SIDE);
    //grass
    window.setColor(100,200,0);
    window.fillRectangle(0,SIDE,SIDE*SCALE*2,SIDE*2);
    //River
    window.setColor(0,100,100);
    window.fillRectangle(0,0,SIDE*SCALE*2,SIDE);

    //The ducks
    for (int r=0; r <SIDE; r++)
      for (int c=0; c<SIDE; c++)
        if  (  duck[r][c] != Picture.BACKGROUND ) {
          //set the colour
          switch (  duck[r][c] ) {
            case EYE -> window.setColor(0,0,0);//black
            case BILL -> window.setColor(255,0,0);//red
            case LEGS -> window.setColor(100,100,0);//brown
            case BODY -> window.setColor(200,200,0);//yellow
          }
          //top left duck
          window.fillRectangle(c*SCALE,SIDE*SCALE+r*SCALE,SCALE,SCALE);
          //bottom right duck
          if  ( duck[r][c] != Picture.LEGS )
            window.fillRectangle(SIDE*SCALE+c*SCALE,r*SCALE,SCALE,SCALE);
          //small top right duck
          window.plot(SIDE*SCALE+SIDE/2+c,SIDE*SCALE+SIDE/2+r);
          //small duck in the middle
          window.plot(2*SIDE+SIDE/2-c,SIDE+SIDE/2+r);
        }

  }

}

錯誤信息:

Assignment2.java:50: error: : expected
            case EYE -> window.setColor(0,0,0);
                                              ^
Assignment2.java:52: error: : expected
            case BILL -> window.setColor(255,0,0);
                                                 ^
Assignment2.java:54: error: : expected
            case LEGS -> window.setColor(100,100,0);
                                                   ^
Assignment2.java:56: error: : expected
            case BODY -> window.setColor(200,200,0);
                                                   ^
4 errors

編輯:

我正在使用:javac 11.0.13

我使用 atom 編輯器和 vs-code 編輯器。

代碼是教師給我們的過去作業的可能解決方案之一。 除了刪除 package 的名稱之外,我沒有進行任何更改。 我嘗試使用終端對其進行編譯,但收到一條錯誤消息,提示我需要使用冒號來切換命令,但我不明白為什么? 不應該是分號嗎?

不久前,我嘗試了很多方法來解決這個問題。 我刪除了 switch 命令的注釋,並嘗試將注釋移至新行,並嘗試再次重寫命令(僅是問題所在的部分)等等。 不知何故,問題已解決,但我不記得是什么解決了問題。 我沒有更改任何代碼。 (我現在沒有那個文件。)

      switch (  duck[r][c] ) {
        case EYE -> window.setColor(0,0,0);//black
        case BILL -> window.setColor(255,0,0);//red
        case LEGS -> window.setColor(100,100,0);//brown
        case BODY -> window.setColor(200,200,0);//yellow
      }

是 Java 中引入的 Java 開關表達式12. Pre-Java-12 它會寫成一個開關語句:

      switch (  duck[r][c] ) {
        case EYE: window.setColor(0,0,0); break;
        case BILL: window.setColor(255,0,0); break;
        case LEGS: window.setColor(100,100,0); break;
        case BODY: window.setColor(200,200,0); break;
      }

Switch 語句要求它們的 case 標簽后跟一個冒號

請注意,switch 表達式返回一個 value ,而 switch 語句則沒有。 考慮以下:

String s = switch(i) {
  case 1 -> "one";
  case 2 -> "two";
  default -> "more";
}

要實現等效行為,您必須重寫:

String convert(int i) {
  switch(i) {
    case 1: return "one";
    case 2: return "two";
    default: return "more";
  }
}

String s = convert(i);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM