2011-10-04 11 views
1

입력이 숫자가 아닌 경우에만 메시지를 표시하는 ApplicationException 예외가 발생하려고합니다. 여기 제가 지금 가지고있는 것이 있습니다 :메시지 만 표시 ApplicationException에서 메시지

static void getBookInfo(Book book) 
{ 
    bool isNumeric; 
    float number; 
    string numberInput; 

    Console.Write("Enter Book Title: "); 
    book.Title = Console.ReadLine(); 
    Console.Write("Enter Author's First Name: "); 
    book.AuthorFirstName = Console.ReadLine(); 
    Console.Write("Enter Author's Last Name: "); 
    book.AuthorLastName = Console.ReadLine(); 
    Console.Write("Enter Book Price: $"); 
    numberInput = Console.ReadLine(); 

    isNumeric = float.TryParse(numberInput, out number); 

    if (isNumeric) 
     book.Price = number; 
    else 
    { 
     throw new ApplicationException 
     (
      "This is not a number!\n" + 
      "Please try again." 
     ); 
    } 
} 

편집 후 전체 프로그램 .cs 작동합니다. 문제는 ApplicationException 부분이 예외의 전체 출력물을 표시하고 있었지만 이제는 메시지 부분 만 표시한다는 것입니다. 일반적으로 그것은 단순한 무언가입니다. :)

using System; 

namespace Lab_6 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Address address = new Address(); 
      address.StreetNumber = "800"; 
      address.StreetName = "East 96th Street"; 
      address.City = "Indianapolis"; 
      address.State = "IN"; 
      address.ZipCode = "46240"; 

      Book book = new Book(); 

      try 
      { 
       getBookInfo(book); 
       book.PublisherAddress = address; 
       book.PublisherName = "Sams Publishing"; 

       Console.WriteLine("----Book----"); 
       book.display(); 
      } 
      catch (NegativeInputException ex) 
      { 
       Console.WriteLine(ex.Message); 
       return; 
      } 
      catch (ApplicationException ex) 
      { 
       Console.WriteLine(ex.Message); // I had to change so I have only this, 
               // instead of whole printout. 
       return; 
      } 
     } 

     static void getBookInfo(Book book) 
     { 
      bool isNumeric; 
      float number; 
      string numberInput; 

      Console.Write("Enter Book Title: "); 
      book.Title = Console.ReadLine(); 
      Console.Write("Enter Author's First Name: ") 
      book.AuthorFirstName = Console.ReadLine(); 
      Console.Write("Enter Author's Last Name: "); 
      book.AuthorLastName = Console.ReadLine(); 
      Console.Write("Enter Book Price: $"); 
      numberInput = Console.ReadLine(); 

      isNumeric = float.TryParse(numberInput, out number); 

      if (isNumeric) 
       book.Price = number; 
      else 
      { 
       throw new ApplicationException 
       (
        "This is not a number!\n" + 
        "Please try again." 
       ) 
      } 
     } 
    } 
} 
+0

를 예외를 catch하고 표시하는 시도 {} 잡기 {}와 정적 getBookInfo 방법에 전화를 둘러싸고있다해야 할 일은, 당신이 만족 할 수 형식을 수정하십시오. –

+1

이것은 두통을 줬지만, 나는 그것을 고쳤다. 코드를 붙여 넣을 때마다 다음을 선택하고 코드 서식 단추를 눌러 두 번 간격을 둡니다. 이상한. – HelpNeeder

답변

3

예외는 아무것도 표시하지 않습니다. 그것은 그들을 잡는 코드에 달려 있습니다.

또한 ApplicationException을 사용하지 않아야합니다. Exception을 사용하거나 FormatException과 같은 더 구체적인 것을 사용하십시오.

+0

그러나 숫자가 아닌 숫자를 입력하면 메시지 설명 만 표시하려면 어떻게해야합니까? 이 순간 나는 전체 예외 텍스트를 보여주고있다. 내 지시 사항 : 책 값을 입력하면 코드는 입력 된 값이 숫자인지 확인해야합니다. 그렇다면 매개 변수로 전달 된 Book 개체에 입력 된 값을 할당 할 수 있습니다. 그렇지 않은 경우 ApplicationException의 객체를 던져야합니다. – HelpNeeder

+0

우선, 귀하의 지침은 단지 메시지를 표시하지 말고 예외를 throw한다고합니다 (강사에게 [ApplicationException]을 보도록하십시오 (http://msdn.microsoft.com/en-us/library/system) .applicationexception.aspx) - 잘못된 예외입니다. 더 이상 사용하지 않아야합니다. 두 번째로 메시지를 표시하려면 Console.WriteLine ("message"); –

+0

간단 할 수 있습니다. 우리는 이번 주에 예외 처리 작업을하고 있습니다. – HelpNeeder

3

사용자에게 메시지를 표시하려면 예외를 throw하지 말고 메시지 만 표시하십시오.

if (isNumeric) 
{ 
    book.Price = number; 
} 
else 
{ 
    MessageBox.Show("This is not a number!\n" + "Please try again."); 
} 

편집

당신이 정말로 예외를 throw 할 그 메시지를 표시합니다. Exception.Message를 사용하여 표시하십시오.

+0

아니요! OP는 예외를 throw하려고합니다. – adatapost

+0

하지만, 구체적으로 ApplicationException의 객체를 던지라고 요청할 수 있습니다. 숙제 ... – HelpNeeder

+0

@HelpNeeder : 귀하의 질문은 무엇입니까? – CharithJ

2

예외를 발생시키는 동작과 예외를 잡아 내고 사용자에게 오류를 표시하는 동작은 두 가지로 구분됩니다.

입력 된 값이 부동 소수점 일 때 예외를 throw하는 코드가 정확합니다.

당신이하지 어떤 이유로이를 위해 메시지

try 
{ 
    Book myBookParameter = .....; 
    getBookInfo(myBookParameter); 
} 
catch(ApplicationException x) 
{ 
    MessageBox.Show(x.Message); 
}