2016-04-02 12 views
2

Ich habe gerade das folgende Programm beendet. Jetzt wurden wir gebeten, den folgenden Code in dem Snipet zu schreiben, das ich in einer Klasse präsentiert habe, die vom Treiberprogramm aufruft, aber ich weiß nicht, wie das aussehen würde, wie es funktionieren würde oder welche Terminologie benötigt wird Dies.Wie mache ich den folgenden Java-Code, den ich erstellt habe, zu einem Treiber und rufe Methode/Klasse auf?

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

Antwort

2

Konzeptionell sollten Sie die main(...) Methode aus der Klasse Area_Shapes entfernen. Erstellen Sie einen Konstruktor in Area_Shapes, der die erforderlichen Parameter akzeptiert. Erstellen Sie eine neue Klasse (z. B. ShapesDriver), die über eine main(...)-Methode verfügt. Nachdem Sie die Informationen im Treiber gesammelt haben, instanziieren Sie die Klasse Area_Shapes.

Ich würde tatsächlich mehrere Shape-Klassen statt einer einzigen Klasse erstellen, die alles zusammenklumpt, aber das ist größer Refactoring (aber mehr OO-like). Ich würde auch eine Methode zur Berechnung und Anzeige der Ergebnisse machen, anstatt die Arbeit im Konstruktor auszuführen.

Dennoch ist die grundlegende konzeptionelle Ansatz (bearbeiten: hinzugefügt, um die Treiberklasse ein Beispiel Schleife)

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; 

     ... 
     } 
    } 
} 

Treiberklasse

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

ein paar Fragen hier also. Erstens, es scheint mir, dass Sie in der Gegend die Nummern für den Bereich bereits angegeben haben, aber ich möchte, dass der Benutzer sie selbst eingeben kann. 2 Wie könnte ich die ganze Programmschleife machen? 3 in der Fahrerklasse, kannst du mir die Art und Weise erklären, in der diese Linie die Shape_Area sa = new ....... funktioniert und was es ist. Und schließlich, 4, wie läuft das Programm, wenn es in die Nicht-Treiber-Klasse eingefügt wird, wie funktioniert es wie oder was ruft die Treiberklasse an, um den Bereich zu bestimmen und das Endergebnis zu erzeugen? –

+0

@ A.Miranda: 1. Dieser Treiber fordert zur Eingabe auf. 2. Fügen Sie eine Schleife um den Eingabebereich hinzu und fragen Sie am Ende (ähnlich wie in der Klasse Shape_Area). 3. Sie erstellen ein neues Shape_Area-Objekt. So wie Sie Ihren aktuellen Shape_Area-Code haben (Anpassungen, die in der Antwort angegeben sind), schalten Sie die Form und die Ausgabe der Anzeige ein; Dies würde den gleichen Ansatz nutzen. 4. verstehe die Frage nicht. – KevinO

+0

Für Frage 4, ich entschuldige mich, ich habe es merkwürdig gesagt, aber ich meine, wie das Programm läuft in Bezug auf die Aufruf-und Treiber-Methode. Ich bin neu im Codieren, deshalb habe ich Probleme, der Terminologie zu folgen und was und wie es funktioniert, um das Endergebnis zu erzielen. Bedeutung wie interagiert die Fahrerklasse mit der anderen? –