2016-04-02 18 views
2

Şu programı yeni bitirdim. Şimdi, sürücü programından çağıran bir sınıfa sunduğum snipet'te şu kodu vermem istendi, ancak bunun nasıl olacağını, nasıl çalışacağını veya yapılması gereken terminolojiyi bilmiyorum. bu.Bir sürücüye oluşturduğum şu Java kodunu nasıl kodlandırabilirim?

/** 
* 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'); 
    } 
} 

cevap

2

Kavramsal olarak, sen Area_Shapes sınıftan main(...) yöntemini kaldırmak gerekir. Gerekli parametreleri kabul eden Area_Shapes'da bir oluşturucu oluşturun. main(...) yöntemine sahip yeni bir sınıf (ör. ShapesDriver) oluşturun. Sürücüdeki bilgileri topladıktan sonra Area_Shapes sınıfını başlatın.

Aslında her şeyi bir araya toplayan tek bir sınıftan ziyade birden çok Shape sınıfı oluşturabilirim, ancak bu daha büyük bir refactoring (ancak daha fazla OO benzeri). Ayrıca, kurucudaki işi yapmak yerine sonuçları hesaplamak ve görüntülemek için bir yöntem de yapardım.

Bununla birlikte, temel kavramsal yaklaşım:

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; 

     ... 
     } 
    } 
} 

Sürücü Class Yani, birkaç soru burada

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

(düzenlemek sürücü sınıfına örnek döngü eklendi). Birincisi, bana göre bölgede, alan için sayıları zaten vermişsinizdir, fakat kullanıcının bunları kendisinin girmesini istiyorum. 2 Bütün program döngüsünü nasıl yapabilirim? Şöför sınıfındaki 3, bana Shape_Area sa = new ....... satırının işleyiş şeklini ve amacının ne olduğunu açıklayabilir misiniz? Son olarak, 4, programın nasıl çalıştığı, sürücü olmayan bir sınıfa ne zaman sokulduğuna göre, nasıl bölge verileceği ve sonuçların nasıl üretileceği, sürücü sınıfından nasıl işliyor? –

+0

@ A.Miranda: 1. Bu sürücü giriş istiyor. 2. Girdi alanının çevresine bir ilmek ekleyin ve sonunda (şimdi Shape_Area sınıfında sahip olduğunuza benzer şekilde) sorun. 3. Yeni bir Shape_Area nesnesi oluşturursunuz. Mevcut Shape_Area kodunuza sahip olmanızın yolu (cevaba işaret eden ayarlamalar), Şekli açarsınız ve çıkışı görüntülersiniz; Bu aynı yaklaşımı kaldıracaktır. 4. Soruyu anlama. – KevinO

+0

Soru 4 için özür dilerim, garip bir şekilde söyledim, ama programın çağrı ve sürücü yöntemi açısından nasıl çalıştığını kastediyorum. Kodlamaya yeni başlıyorum, bu yüzden terminolojiyi takip etmede sorun yaşıyorum ve nihaî sonucun üretilmesi açısından neyin nasıl ve ne işe yaradığı hakkında. Sürücü sınıfı diğeriyle nasıl etkileşiyor? –

İlgili konular