2017-06-22 181 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中使用。 –

相关问题