2016-07-28 17 views
0

Kürzlich hatte ich einen praktischen Test für Software-Entwickler Position, in diesem Test stellten sie folgende Frage.OOP Ansatz für das Triangle Check Szenario

mir eine Funktion schreiben, die für die Längen der Seiten eines Dreiecks, drei ganzzahlige Eingänge empfangen und gibt einen von vier Werten den Dreieck-Typen (1 = scalene, 2 = gleichschenklig, 3 = gleichseitig, um zu bestimmen, 4 = Fehler)

auch fragte sie enums und OOP Ansatz für diese Lösung zu verwenden,

aber ohne OOP Ansatz baute ich auf diese Weise auf folgende

using System; 
using System.Linq; 

namespace triangleSolution 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] values = new int[3]; 

      for (int i = 1; i <= 3; i++) 
      { 
       Console.WriteLine("Please enter side " + i +" value"); 
       values[i - 1] = Int32.Parse(Console.ReadLine()); 
      } 

      Console.WriteLine(GetTriangleType(values[0], values[1], values[2])); 
      Console.WriteLine(); 
     } 

     public enum TriangleType 
     { 
      Scalene = 1, // no two sides are the same length 
      Isosceles = 2, // two sides are the same length and one differs 
      Equilateral = 3, // all sides are the same length 
      Error = 4 // inputs can't produce a triangle 
     } 

     public static TriangleType GetTriangleType(int a, int b, int c) 
     { 
      // There should also be a side length check 
      if (a <= 0 || b <= 0 || c <= 0) 
      { 
       return TriangleType.Error; 
      } 

      if (a == b && a == c) // These could also be their own methods 
      { 
       return TriangleType.Equilateral; 
      } 
      else if (a == b || a == c || b == c) 
      { 
       return TriangleType.Isosceles; 
      } 
      else 
      { 
       return TriangleType.Scalene; 
      }  

     }   

    } 
} 

Ich wünsche obige Lösung in OOP Art und Weise zu erweitern, obwohl ich dieses Interview gescheitert :)

+1

Für eine einfache Halb mathematisch wie diese Frage, was wäre ein OOP Weg dorthin sein? Alles sieht gut aus. Vielleicht wollten sie, dass du einen Interger anstelle eines Enums zurücksendest. – lokusking

+0

@lokusking eigentlich betonten sie, eine Lösung auf OOP-Art zu bauen, also bin ich froh, sie zu studieren – kez

+0

Wer diese Frage formulierte, hatte wahrscheinlich keine Ahnung, welche OOP verwendet werden sollte zum. Eine einzelne (!) Funktion garantiert keine ganze Klasse. –

Antwort

1

Sie eine Dreieck-Klasse verwenden könnte, so etwas wie diese

public class Triangle 
{ 
     private int[] sideLength; 

     public Triangle(int side1, int side2, int side3) 
     { 
      sideLength = new int[3]; 
      sideLength[0] = side1; 
      sideLength[1] = side2; 
      sideLength[2] = side3; 
     } 

     public TriangleType GetTriangleType() 
     { 
      //Your code here ;) 
     } 

} 
+0

Dies ist die einfachste "OOP" -Lösung - ein Substantiv für eine Klasse, ein Konstruktor, der Abhängigkeiten und eine No-Argument-Methode, die die Arbeit macht . – jrahhali

2

Es gibt viele Möglichkeiten, dies zu tun (bezogen auf die vage Beschreibung)

zB: verwenden Sie a,b,c in einer Klasse Triangle, das eine Eigenschaft hat TriangleType

Aber ich muss sagen, dass der Wortlaut

Schreib mir eine Funktion, die ...

ist sehr irreführend, wenn OOP war, was sie nach waren.

public enum TriangleType 
{ 
    Scalene = 1, // no two sides are the same length 
    Isosceles = 2, // two sides are the same length and one differs 
    Equilateral = 3, // all sides are the same length 
    Error = 4 // inputs can't produce a triangle 
} 

public class Triangle 
{ 
    public TriangleType TriangleType {get; private set;} 
    public int SideA {get; private set;} 
    public int SideB {get; private set;} 
    public int SideC {get; private set;} 

    public Triangle(int a, int b, int c) 
    { 
     SideA = a; 
     SideB = b; 
     SideC = c; 
     TriangleType = GetTryangleType(a,b,c); 
    } 

    public static TriangleType GetTriangleType(int a, int b, int c) 
    { 
     // There should also be a side length check 
     if (a <= 0 || b <= 0 || c <= 0) 
     { 
      return TriangleType.Error; 
     } 

     if (a == b && a == c) // These could also be their own methods 
     { 
      return TriangleType.Equilateral; 
     } 
     else if (a == b || a == c || b == c) 
     { 
      return TriangleType.Isosceles; 
     } 
     else 
     { 
      return TriangleType.Scalene; 
     }  
    } 
} 

Verbrauch:

static void Main(string[] args) 
{ 
    int[] values = new int[3]; 

    for (int i = 1; i <= 3; i++) 
    { 
     Console.WriteLine("Please enter side " + i +" value"); 
     values[i - 1] = Int32.Parse(Console.ReadLine()); 
    } 

    Triangle triangle = new Triangle(values[0], values[1], values[2]); 

    Console.WriteLine(triangle.TriangleType); 
    Console.WriteLine(); 
} 
+1

Aber ehrlich, ist das nicht ein bisschen übertrieben für die angeforderte Aufgabe? – lokusking

+0

@lokusking Absolut! Die Funktion selbst funktioniert und entspricht dem Wortlaut der Aufgabe. Wenn sie OOP-Fähigkeiten sehen wollten, sollten sie eine andere Aufgabe haben. –

+0

@ManfreedRadlwimmer Ihre Lösung scheint gut zu studieren, werde ich durch diese gehen. Danke vielmals – kez