【发布时间】:2017-06-22 13:13:59
【问题描述】:
我想根据第一个开关设置类的属性。如果 vrsta (eng. type) 是 krug (circle) 我想要它的直径 (r) 作为 Figura (eng. Figure) 类型的属性,如果它是 pravouganonik(eng. rectangle) 我想要它的边:a和 b,如果它是 kvadrat(eng.square),我想要它的边值 (str)。如何修复我的开关,它给了我编译错误。 switch(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);
}
}
【问题讨论】:
-
这不能解决我的问题,我想,当我将 Figura 对象实例化为具有像 f1.str 这样的属性时。
-
您不能按照您在代码中显示的方式进行操作。 switch 语句是在运行时评估的,而类成员变量必须在编译时声明。毕竟,编译器必须创建已经具有适当字段的类字节码,并且由于编译的类不知道哪些实例将具有什么几何类型,所以这是行不通的。相反,正如@Rajeev Singh 所建议的那样,使用继承来创建在运行时匹配所需几何类型的对象实例。