2017-11-27 1 views
0

Double.Parse를 사용하여 Celcius에서 Fahrenheit으로 변환하는 성공적인 코드가 있습니다. 그러나 Double.TryParse를 수행하면 어떻게 보이는지 궁금했지만 코드를 완료하는 방법을 파악할 수는 없습니다. 일단 실행, 화씨로 Celcius 변환 - Double.TryParse

변환을 위해 값을 입력하십시오 ... 나는 "만약, 다른"에서 "잘못된 코드"를 제시 할 수 있어요하지만, 난 여전히 내 Invaild 출력 후이 얻을 :
30 배
잘못된 코드
화씨 섭씨에서 변환은 다음과 같습니다 - 현재는 않습니다 32

using System; 
using System.Text; 

namespace CSharpBasics 
{ 
    class Program 
    { 
     public static double CelciusToFarenheit(string celciusTemperature) 
     { 
      //Converting string to a double for conversion 

      double celcius; 
      if (Double.TryParse(celciusTemperature, out celcius)) 
      { 

      } 
      else 
      { 
       Console.WriteLine("Invalid code"); 
      } 
      double fahrenheit = (celcius * 9/5) + 32; 
      return fahrenheit; 
     } 

     public static void Main(string[] args) 
     { 
      Console.WriteLine("Please enter a value for conversion:"); 
      var input = CelciusToFarenheit(Console.ReadLine()); 
      Console.WriteLine("The conversion from Celcius to Fahrenheit is: " + input); 
     } 
    } 
} 
+0

힌트 1 : 코드 스모어 - 빈'if' 블록. 힌트 2 : 언제 화씨 값을 계산합니까? 팁 :'Nullable '을 반환 값 –

답변

1

변환 전에 입력을 확인하여 잘못된 입력에 대해 잘못된 결과가 표시되지 않도록하고 잘못된 입력을 먼저 알리는 메시지를 반환해야합니다. 다음과 같은 것 :

public static double CelciusToFarenheit(double celcius) 
    { 
     double fahrenheit = (celcius * 9/5) + 32; 
     return fahrenheit; 
    } 

    public static void Main(string[] args) 
    { 
     Console.WriteLine("Please enter a value for conversion:"); 
     var input = Console.ReadLine(); 

     double celcius; 
     if (Double.TryParse(input, out celcius)) 
     { 
      var result = CelciusToFarenheit(celcius); 
      Console.WriteLine("The conversion from Celcius to Fahrenheit is: " + result); 
     } 
     else 
     { 
      Console.WriteLine("Invalid code"); 
     }    
    } 
+0

대단히 감사합니다! 이것이 내가 어떻게 그려지는지 정확히 묘사 한 것입니다. 내 Double.Parse와 비슷합니다. TryParse를 Main Method에 추가하는 것이 적절한 지 확신 할 수 없었습니다. – Loves2Program

+0

@ Loves2Program : IMHO 적절하지 않습니다. 주 방법의 추상화 수준이 너무 낮습니다. 특히이 메소드를'public double Fahrenheit (double celsius) => celsius * 9/5 + 32;와 같은 하나의 라이너로 만들면 실제 계산이 자체 메소드에서 수행 될 필요가 거의 없습니다. –

0

방법 서명 public static double CelciusToFarenheit(...)이 방법은 값을 반환하는 것을 말한다.

그러나, 프로그램의 흐름이 잘못된 입력을 고려한다 - 따라서 당신은이 정보가 필요합니다

  1. 이었다 입력 된 값 을 무엇
  2. 이 값

에게이다 유효한 값 이 문제를 해결할 수있는 방법은 여러 가지가 있습니다. 최소한 다음과 같습니다.

  1. 창 모두 정보
  2. 사용을 리턴 값을 보유하고
  3. 2 개 방법 유효성을 확인하기위한 하나의 값을 전달하기위한 하나에 하나의 방법을 분할 예외 잘못된 결과를 나타내는 구조체 또는 개체.

은의이 3 가지 옵션을 논의하자 : 당신이 Double.TryParse() 볼 때

  • 3) 이것은 좋은 찾고, 될 수 있지만, 당신은 가능성이 중복 코드를 소개하겠습니다. Main 메서드를 보면 추상화 수준이 동일하지 않습니다.
  • 2) 예외적 인 경우 예외를 사용해야합니다. 잘못된 사용자 입력은 오히려 평범한 것 같습니다. 이 경우에는 이상적이지 않습니다.
  • 1) 메소드가 유효성 확인 및 계산 중 2 가지를 담당 할 수 있다는 점을 제외하고는 꽤 괜찮습니다.

구현하려면 새 구조체 또는 클래스를 작성할 필요가 없습니다. Nullable<double> 또는 double?을 사용하면됩니다.

당신은 깨끗한 코드 (R.C. Martin을 잠재적으로 언급)에 대해 이야기하고 있기 때문에, 나는 main 메소드를 살펴봄으로써 시작할 것입니다. 기본적으로 코드는 IPO 원칙 (입력, 처리, 출력)을 따릅니다. 그것은 사용자의 입력 아니기 때문에

var input = CelciusToFarenheit(Console.ReadLine()); 

또한, 변수 이름 input은 여기에서 매우 유용 아니라, 처리 후의 출력 : 그러나, 하나의 행은 2 일을한다.그 부분에 대한

제안은 :

public static void Main(string[] args) 
{ 
    var userInput = GetCelsiusInputFromUser(); 
    var output = CelciusToFarenheit(userInput); 
    PrintOutput(output); 
} 

또한, 변환 방법은 변환하지 않고,뿐만 아니라 부분적인 결과를 인쇄 :

Console.WriteLine("Invalid code"); 

나는 그 조각을 제거하는 것과에두고 그 케이스를 처리하는 출력 메소드.

전체 코드 :

BTW
using System; 

namespace CSharpBasics 
{ 
    class Program 
    { 
     public static double? CelciusToFarenheit(string celciusTemperature) 
     { 
      //Converting string to a double for conversion 
      double celcius; 
      if (Double.TryParse(celciusTemperature, out celcius)) 
      { 
       double fahrenheit = (celcius * 9/5) + 32; 
       return fahrenheit; 
      } 
      else 
      { 
       return null; 
      } 
     } 

     public static void Main(string[] args) 
     { 
      var userInput = GetCelsiusInputFromUser(); 
      var output = CelciusToFarenheit(userInput); 
      PrintOutput(output); 
     } 

     private static void PrintOutput(double? output) 
     { 
      if (output == null) 
      { 
       Console.WriteLine("Invalid code"); 
      } 
      else 
      { 
       Console.WriteLine("The conversion from Celcius to Fahrenheit is: " + output); 
      } 
     } 

     private static string GetCelsiusInputFromUser() 
     { 
      Console.WriteLine("Please enter a celsius value for conversion:"); 
      var userInput = Console.ReadLine(); 
      return userInput; 
     } 
    } 
} 

: 당신이 기술적 인 문제가없는 경우, https://codereview.stackexchange.com/ 깨끗한 코드에 관한 질문에 더 적합 할 수 있습니다.

+0

으로 조사해주십시오. 감사합니다. 토마스, 제가 알아 봅니다. – Loves2Program

관련 문제