2016-04-02 9 views
2

私は最近、次のプログラムを終了しました。今私は、ドライバプログラムから呼び出すクラスに提示したスニペットで次のコードを作成するように求められましたが、どのように見えるか、どのように動作するか、または必要な用語についてはわかりませんこの。ドライバに作成したメソッド/クラスを呼び出して、次のJavaコードを作成するにはどうすればよいですか?

/** 
* Will Calculate the Area of Given Shapes. 
* 
* @author Adrian Miranda 
* @version (a version number or a date) 
*/ 

import java.util.Scanner; 
public class Area_Shapes 
{ 
    public static void main(String[] args) 
    { 
     Scanner stdIn = new Scanner(System.in); 
     int Shape; 
     String A = "The Area is "; 

     double Area; 
     double Base; 
     double Height; 
     double q1; 
     double q2; 
     double radius; 
     double Length; 
     char response; 



     do 
     { 
     System.out.println(" Enter A Shape 1 = triangle 2 = square 3 = rhombus 4 = circle 5 = rectangle: "); 
     Shape = stdIn.nextInt(); 
     if (Shape == 1) 
     { 

      System.out.println("Enter Base: "); 
      Base = stdIn.nextDouble(); 
      System.out.println("Enter Height: "); 
      Height = stdIn.nextDouble(); 

      Area = (Base * Height)/ 2 ; 
      System.out.println(A + Area); 
      System.out.println(" Enter Another Shape? (y/n): "); 
      response = stdIn.next() .charAt(0); 
     } 

     else if (Shape == 2) 
     { 
      System.out.println("Enter length "); 
      Length = stdIn.nextDouble(); 


      Area = Length * Length; 
      System.out.println(A + Area); 
      System.out.println(" Enter Another Shape? (y/n): "); 
      response = stdIn.next() .charAt(0); 

     } 

     else if (Shape == 3) 
     { 
      System.out.println("Enter q1: "); 
      q1 = stdIn.nextDouble(); 
      System.out.println("Enter q2: "); 
      q2 = stdIn.nextDouble(); 

      Area = q1 * q2 * 0.5 ; 
      System.out.println(A + Area); 
      System.out.println(" Enter Another Shape? (y/n): "); 
      response = stdIn.next() .charAt(0);; 
     } 
     else if (Shape == 4) 
     { 
      System.out.println("Enter radius "); 
      radius = stdIn.nextDouble(); 


      Area = radius * Math.PI * radius; 
      System.out.println(A + Area); 
      System.out.println(" Enter Another Shape? (y/n): "); 
      response = stdIn.next() .charAt(0); 

     } 
     else if (Shape == 5) 
     { 

      System.out.println("Enter Base: "); 
      Base = stdIn.nextDouble(); 
      System.out.println("Enter Height: "); 
      Height = stdIn.nextDouble(); 

      Area = (Base * Height) ; 
      System.out.println(A + Area); 
      System.out.println(" Enter Another Shape? (y/n): "); 
      response = stdIn.next() .charAt(0); 
     } 
     else 
     { 
      System.out.println("error, invalid shape, please enter a square triangle or rhombus."); 
      System.out.println(" Enter Another Shape? (y/n}: "); 
      response = stdIn.next() .charAt(0);; 
     } 
     }while (response == 'y'); 
    } 
} 

答えて

2

概念的には、あなたはArea_Shapesクラスからmain(...)メソッドを削除する必要があります。必要なパラメーターを受け入れるコンストラクターをArea_Shapesに作成します。 main(...)メソッドを持つ新しいクラス(たとえば、ShapesDriver)を作成します。ドライバの情報を収集したら、Area_Shapesクラスをインスタンス化します。

私は実際には、すべてをまとめる単一のクラスではなく、複数のShapeクラスを作成しますが、それはより大きなリファクタリングです(ただしOOのようになります)。また、コンストラクタで作業するのではなく、結果を計算して表示するメソッドを作成します。

はいえ、基本的な概念のアプローチ:

public class Area_Shapes { 
    public Area_Shapes(int shape, double l1, double l2) 
    { 
     double area; 
     switch (shape) { 
     case 1: 
     area = (l1 * l2)/2; 
      System.out.println("A triangle has an area of: " + area); 
      break; 

     ... 
     } 
    } 
} 

ドライバクラスので、カップルの質問はここに

public class Driver { 
    public static void main(String args[]) { 
    boolean keepGoing = true; 
    do { 
     //collect shape information 
     System.out.println("Enter your shape (1 = triangle ..."); 
     shape = stdIn.nextInt(); 

     // based upon the shape, collect the inputs 
     double inp1, inp2; 
     switch (shape) { 
     case 1: 
      // inp1 is the base, inp2 is the height 
      System.out.println("Enter Base: "); 
      inp1 = stdIn.nextDouble(); 
      System.out.println("Enter Height: "); 
      inp2 = stdIn.nextDouble(); 
     break; 
     } //switch shape 

     // create a shape area instance; this calculates the 
     // area and outputs the answer 
     Shape_Area sa = new Shape_Area(shape, inp2, inp2); 

     // prompt the user to enter another shape 
     if (user_wants_to_stop) { 
     keepGoing = false; 
     } 
    } while (keepGoing) 
    } // main() 
} 
+0

編集は、ドライバクラスの例のループを追加しました)。 1つは、この地域ではすでに地域の番号が与えられているようですが、ユーザーが入力できるようにしたいと考えています。 2プログラム全体をどのようにループさせることができるでしょうか。ドライバークラスの3、あなたは私にその行Shape_Area sa = new .......がどのように作用し、それが目的であるかを説明することができますか?最後に、4、プログラムをどのように非ドライバクラスに挿入するか、どのように機能しているのか、ドライバクラスから何を呼び出して、領域を与えて最終結果を生成するのかという点でプログラムを実行していますか? –

+0

@ A.ミランダ:1.このドライバは入力を求めています。 2.入力領域の周りにループを追加し、最後に(現在のShape_Areaクラスのものに似ています)尋ねます。 3.新しいShape_Areaオブジェクトを作成します。あなたの現在のShape_Areaコード(答えに指摘されている調整値)を持っているか、シェイプをオンにして出力を表示します。これは同じアプローチを活用するだろう。 4.その質問を理解していない。 – KevinO

+0

質問4については、私は奇妙なことを言いましたが、呼び出しとドライバの方法でプログラムがどのように動作しているかを知っています。私はコーディングには新しいので、用語に従うのが難しく、最終結果を出すという点で何がどのように機能するのかということに問題があります。意味はどのようにドライバクラスは、他と相互作用しているのですか? –

関連する問題