-1

我有这段代码,它将根据用户输入的形状找到不同形状的区域。问题是如何从主类获取输入的测量值(例如长度、宽度)到圆形、三角形、矩形和方形类?这是我的代码。

    import java.lang.Math;
    import java.util.Scanner;
    import java.text.DecimalFormat;

    class Circle{
    double radius;
    void CircleMeasurement(){
        radius = r;
    }

    double getCircleArea(){
        return(Math.PI*Math.pow(radius,2));
    }
    }

    class Triangle{
    int base, height;
    void TriangleMeasurement(){
        base = b;
        height = h;
    }
    int getTriangleArea(){
        return((base*height)/2);
    }
   }

    class Rectangle{
    int length, width;
    void RectangleMeasurement(){
        length = l;
        width = w;
    }
    int getRectangleArea(){
        return(length*width);
    }
     }

    class Square{
    int sides;
    void SquareMeasurement(){
        sides = s;
    }
    int getSquareArea(){
        return( sides * sides);
    }
   }


    class Shapes{
    public static void main(String[] args){
    String key;
    double r;
    int b, h, l, w, s;

        System.out.println("Welcome!");
        System.out.println("Choose your option:");
        System.out.println("1 - Circle, 2 - Triangle, 3 - Rectangle, 4 - Square");
        Scanner in = new Scanner(System.in);
        key = in.nextLine();


    if (key=="1" || key =="circle"){
        System.out.println("Area for Circle");
        System.out.println("Enter radius:");
        Scanner.in = new Scanner(System.in);
        r = in.nextInt;
        Circle circle1 = new Circle();
        System.out.println("The area is equal to" + circle1.getCircleArea());
    }


    else if (key == "2"){
        System.out.println("Area for Triangle");
        System.out.println("Enter base:");
        Scanner.in = new Scanner(System.in);
        b = in.nextInt;
        System.out.println("Enter height:");
        h = in.nextInt;
        Triangle triangle1 = new Triangle();
        System.out.println("The area is equal to" + triangle1.getTriangleArea());

    }

    else if (key == "3"){
        System.out.println("Area for Rectangle");
        System.out.println("Enter length:");
        Scanner.in = new Scanner(System.in);
        l = in.nextInt;
        System.out.println("Enter width:");
        w = in.nextInt;
        Rectangle rectangle1 = new Rectangle();
        System.out.println("The area is equal to" + rectangle1.getRectangleArea());
    }

    else if (key == "4"){
        System.out.println("Area for Square");
        System.out.println("Enter side:");
        Scanner.in = new Scanner(System.in);
        s = in.nextInt;
        Square square1 = new Square();
        System.out.println("The area is equal to" + square1.getSquareArea());
   }

   }
   }
4

5 回答 5

1

您可以在使用构造函数创建对象时设置适当的变量。

Circle(int r){
 radius = r;
}

Rectangle(int l, int b){
length = l;
breadth = b;
}

Circle c = new Circle(9); //creates a new Circle with radius 9
Rectangle r = new Rectangle(2,3) //Creates a new Rectangle with length as 2, breadth as 3

也就是说,您也可以使用 setter 方法。

此外,使用==比较字符串是不受欢迎的,而且通常会给你错误的结果。使用 .equals()代替。

"Circle".equals(input);
于 2013-08-21T10:55:20.100 回答
0

您可以通过多种方式设置变量的值。第一种方式是构造函数,请参阅 Rocketboy 的答案。第二个是将您的变量标记为私有并使用mutator methods。这是推荐的方式/见下面的例子:

 class Circle{
        private double radius;
        Circle(double radius){
            this.radius = radius;
        }
        public void setRadius(double radius){
            this.radius = radius;
        }
        public double getRadius(){
            return radius;
        }
于 2013-08-21T11:43:55.520 回答
0

这里要提两件事:

  1. 将从扫描仪获取的值传递给类作为方法或构造函数的参数。因此,它可以用于进一步计算的方法。在这里使用继承也是一个不错的选择。
  2. 切勿==用于字符串比较。它不起作用,请.equals改用。
于 2013-08-21T10:52:18.020 回答
0

您的代码中的问题之一是您正在使用 == 比较字符串。字符串应该使用 equals 方法进行比较。

更改此类声明

if (key=="1" || key =="circle"){

if (key.equals("1") || key.equals("circle")){

另一个问题是您没有在类中定义具有正确参数的构造函数,例如 Circle、Triangle 等。由于您没有设置正确的属性,因此调用这些方法不会为您提供正确的结果。

例如,您需要在 Circle 类中有构造函数来初始化半径参数:

public Circle(int r) {
    radius = r;
}

像这样创建 Circle 的对象,然后调用 getCircleArea 应该会给你想要的结果:

 Circle circle1 = new Circle(r);
 System.out.println("The area is equal to" + circle1.getCircleArea());
于 2013-08-21T10:53:14.623 回答
-2

首先,您应该创建 getter 和 setter。然后

 class Circle{
    double radius;
    public double getRadius(){
    return radius;
    }
    public void setRadius(double r){
    radius=r;
    }
    void CircleMeasurement(){
        radius = r;
    }
....
    r = in.nextInt;
        Circle circle1 = new Circle();
    circle1.setRadious(r);
于 2013-08-21T10:52:24.820 回答