-1

以下に、形状の領域を計算するために書いた小さなプログラムがあります....

私の質問は、これが正しい方法であるということです。友人は同様のことを行い、メインの形状から継承された複数の形状を持っていました。おっと?私は形状の面積だけを尋ねるので、私のものは大丈夫ですか?そして、これをより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;


    }
}
4

2 に答える 2

1

単一の基本クラスまたはインターフェイスから複数のクラスを継承することは、ここでは間違いなく優れた設計です。クラスを使用して、特定の機能またはオブジェクトをカプセル化します (その場合trianglesquareなど)。また、いくつかの機能を共有する複数のクラスがある場合は、それを共通のインターフェイスとして抽出して、より良いレベルの抽象化を実現します。

于 2013-01-21T16:34:33.473 に答える
0

簡単な答えは、このような「形状」のインターフェースを使用することです

interface Shape {

double[] dimensions;
double calcArea();
}

そして、すべてのシェイプにこのインターフェイスを実装させます。

いう

class Circle implements Shape {
...
}

形状ごとに異なる calcArea() メソッドを実装する

ランナーで、サークル、ボックスなどを開始します...

領域が必要な場合、実際にどの形状が背後にあるかを気にする必要はありません。メソッド shape.calcArea() を呼び出すだけで、適切な形状が見つかります。

于 2013-01-21T16:40:13.587 に答える