我可以根据其他属性设置类“属性”吗?

时间:2017-06-22 13:14:00

标签: java class variables

我想基于第一个开关设置类的属性。如果vrsta(eng。类型)是krug(圆圈)我希望它的直径(r)作为其类型Figura(eng。图)的属性,如果它是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);
}
}

1 个答案:

答案 0 :(得分:1)

引发错误compile error. Illegal start of type on switch(vrsta),因为它不遵循定义成员的约定。相反,它应该包含在成员函数中。

成员应该像这样定义

class A {
    modifiers type name;
}

此问题的简单解决方案是使用继承。创建基类Figure,并从中创建其他子类CircleSquareRectangle

class Figure {
    // base class
}

class Circle extends Figure {
    double radius;
}

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

class Square extends Figure {
    double side;
}

在main中,您可以创建所需的类的对象

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