2017-06-22 182 views
0

我想根據這第一個開關設置類的屬性。如果vrsta(eng。type)是krug(circle),我想將它的直徑(r)作爲其類型Figura(eng。Figure)的屬性,如果它是pravouganonik(eng。矩形),我想要它的兩側:a和b,如果它是kvadrat(eng。square),我想要它的邊值(str)。我如何修復我的開關,它給我編譯錯誤。開關上的非法類型開始(vrsta){,它給了我同樣的期望,對於「krug」的情況,也是一個孤立的情況。非常感謝!我可以根據其他屬性設置類「屬性」嗎?

import java.util.Scanner; 

class Figura{ 
String boja,vrsta; 
Double povr; 

switch (vrsta){ 
    case "krug": 
     Double r; 
     break; 
    case "pravougaonik": 
     Double a,b; 
     break; 
    case "kvadrat": 
     Double str; 
     break; 
} 

Figura(String b, String v){ 
    Scanner sc=new Scanner(System.in); 
    boja=b; 
    vrsta=v; 
    switch (vrsta){ 
     case "krug": 
      r=sc.nextDouble(); 
      povr=r*r*3.14; 
      break; 
     case "pravougaonik": 
      a=sc.nextDouble(); 
      b=sc.nextDouble(); 
      povr=a*b; 
      break; 
     case "kvadrat": 
      str=sc.nextDouble(); 
      povr=str*str; 
      break; 
    } 
} 

public static void main(String args[]){ 
    Scanner sc=new Scanner(System.in); 
    Figura f1=new Figura(sc.nextLine(),sc.nextLine()); 
    System.out.println(f1.povr); 
} 
} 
+0

再也無法解決我的問題的類的對象,我想,當我如我菲古拉對象有像f1.str屬性一個例子。 –

+0

您無法按照您在代碼中顯示的方式執行此操作。 switch語句在運行時被評估,而類成員變量必須在編譯時聲明。畢竟,編譯器必須創建已經具有相應字段的類字節碼,並且由於編譯的類不知道哪些實例具有什麼幾何類型,所以這不起作用。 相反,如@Rajeev Singh所建議,使用繼承來創建在運行時與所需幾何類型相匹配的對象實例。 –

回答

1

錯誤compile error. Illegal start of type on switch(vrsta)被引發,因爲它不遵循約定定義成員。相反,它應該被包裝在一個成員函數中。

甲構件應這樣

class A { 
    modifiers type name; 
} 

此問題的一個簡單的解決方案是使用繼承來定義。創建一個基類Figure,並從中創建其他子類Circle,Square,Rectangle

class Figure { 
    // base class 
} 

class Circle extends Figure { 
    double radius; 
} 

class Rectangle extends Figure { 
    double length; 
    double width; 
} 

class Square extends Figure { 
    double side; 
} 

在主,你可以創建你需要

public static void main(String[] args) { 
    Figure f; 
    int type = 1; // set type as required 

    switch(type) { 
     case 1: 
      f = new Circle(); 
      break; 
     case 2: 
      f = new Rectangle(); 
      break; 
     case 3: 
      f = new Square(); 
      break; 
     default: 
      f = new Figure(); 
    } 
} 
+0

爲什麼'class Square extends Rectangle'? – jsheeran

+0

@jsheeran是的,它可以,答案是解決問題而不是繼承,所以我跳過它,但是更好的做法。 –

+0

我同意,但在主要方法中,我需要調用Circle c = new Circle();例如,但我希望它使用圖f1 = new Figure();.它甚至有可能嗎?我使用Pascal語言編寫了這個程序,所以我想這是否可以在Java中使用。 –

相關問題