OOP建议 - 我应该改变我的程序运行方式吗?

时间:2013-01-21 16:32:05

标签: java oop

下面我有一个小程序,我写的是为了解决形状领域......

我的问题是这是正确的方法,一个朋友做了类似的,并有多个从主要形状继承的形状。 OOP?是我的好,因为我只会问一个形状的区域,而不是更多?我将如何更改它以使其更加OO?

主程序/////

package areaprog;

import java.util.Scanner;
import java.util.InputMismatchException;

public class Mainprog {

    public static void main (String [] args){

        //Area Menu Selection
        System.out.println("What shape do you need to know the area of?\n" +
        "1: Square?\n" +
        "2: Rectangle?\n" +
        "3: Triangle?\n" +
        "4: Circle? \n" +
        "5: Exit\n"     
        );

        //User input for menu

        Scanner reader = new Scanner(System.in);
        System.out.println("Number: ");

        //Menu syntax checking
        while (!reader.hasNextDouble())
        {
            System.out.println("Thats not a number you tool.\n");
            System.out.println("Now pick again\n" +
                    "1: Square?\n" +
                    "2: Rectangle?\n" +
                    "3: Triangle?\n" +
                    "4: Circle? \n" +
                    "5: Exit\n"     
                    );

            reader.next(); //ask for next token     
        }               
            double input = reader.nextDouble();
            reader.nextLine();



        //Depending on user selection, depends on what method is called using  switch.
    Scanner scan = new Scanner(System.in);

        //Square selection and InputMismatch Exception

    try {

        if (input == 1){
            System.out.println("What is a length of 1 side of the Square?\n");
                double s1 = scan.nextDouble();
                double SqAns = AreaCalculator.getSquareArea(s1);
                System.out.println("The area of you square is: " + SqAns);

                       }    
        }           
    catch (InputMismatchException e)
       {
        System.out.println("Why are you trying to be clever? use an interger");


       }

        //Rectangle selection    
            if (input == 2){
            System.out.println("What is the width of your rectangle?.\n");
                double r1 = scan.nextDouble();
            System.out.println("What is the height of your rectangle?\n");
                double r2 = scan.nextDouble();
                double RecAns = AreaCalculator.getRectArea(r1, r2);
            System.out.println("The area of your rectangle is: " + RecAns);    
            }
        //Triangle selection
        if (input == 3){
            System.out.println("What is the base length of the triangle?.");
                double t1 = scan.nextDouble();
            System.out.println("What is the height of your triangle?");
                double t2 = scan.nextDouble();
                double TriAns = AreaCalculator.getTriArea(t1, t2);
            System.out.println("The area of your triangle is " + TriAns);
        }
        //Circle selection
        if (input == 4){
            System.out.println("What is the radius of your circle?.");
                double c1 = scan.nextDouble();
                double CircAns = AreaCalculator.getCircleArea(c1);
            System.out.println("The area of your circle is " + CircAns);    

        }
        //Exit application
        if (input == 5){
            System.out.println("Goodbye.");

        }


    }

}

AreaCalculator.java ////

 package areaprog;


public class AreaCalculator {

    public static double getRectArea(double width, double height) {
        double aValue = width * height;

        return aValue;


    }

    public static double getCircleArea(double radius){
        double PI = Math.PI;
        double aValue = PI * Math.pow(radius, 2);

        return aValue;


    }

    public static double getSquareArea(double side) {
        double aValue = Math.pow(side, 2);

        return aValue;


    }

    public static double getTriArea(double base , double height) {
        double aValue = (base/2)* height;

        return aValue;


    }
}

2 个答案:

答案 0 :(得分:1)

从单个基类或接口继承多个类肯定是一个更好的设计。使用类来封装给定的功能或对象(在这种情况下trianglesquare等。此外,当您有多个类共享某些功能时,最好将其作为通用接口提取,以实现更好的抽象级别。

答案 1 :(得分:0)

简单的答案是使用像这样的'shape'接口

interface Shape {

double[] dimensions;
double calcArea();
}

让你的所有形状都实现这个界面。

class Circle implements Shape {
...
}

为每个形状实现不同的calcArea()方法

在你的跑步者中,你初始化一个圆圈,框等......

当你需要区域时,你不必关心它背后的形状,只需调用方法shape.calcArea(),它就会找到合适的形状。