2017-10-04 8 views
0

GPAがdoubleではなくintとして入力されていても、私はそれを行うことができません。しかし、studentIDフィールドに10進数値を入力すると、FormatExceptionをスローすることができました。私が知っているのは、デフォルトでdouble型はint型の値を受け入れます。それが例外をスローしない理由ですが、GPAとして入力された値がdoubleであることを確認する必要があります。入力がdoubleではなくintの場合、FormatExceptionをスローする方法はありますか?

using System; 
using static System.Console; 
// Declare a Student 
// ID must be an integer and gpa must be a double to continue 
namespace Debug4_4 
{ 
    class Debug4_4 
    { 
     static void Main() 
     { 
      Student stu = new Student(); 
      bool areNumbersGood = false; 
      while (!areNumbersGood) 
      { 
       try 
       { 
        stu.setID(); 
        stu.setGPA(); 
        areNumbersGood = true; 
       } 
       catch (FormatException e) 
       { 
        WriteLine(e.Message); 
        WriteLine("(Either the student ID or the GPA"); 
        WriteLine(" was not in the correct format.)"); 
        WriteLine("You will have to re-enter the student data."); 
       } 
      } 
      WriteLine("Valid student"); 
     } 
    } 
    public class Student 
    { 
     private int stuId; 
     private double stuGpa; 
     public void setID() 
     { 
      string stuNumber; 
      try 
      { 
       Write("Enter student ID "); 
       stuNumber = ReadLine(); 
       stuId = Convert.ToInt32(stuNumber); 
      } 
      catch (FormatException fe) 
      { 
       throw (fe); 
      } 
     } 

     //throw (fe); 
     //} 
     public void setGPA() 
     { 
      string stuGPAString; 
      //string stuGPAString; 
      try 
      { 
       Write("Enter student GPA "); 
       stuGPAString = ReadLine(); 
       stuGpa = Convert.ToDouble(stuGPAString); 

      } 
      catch (FormatException fe) 
      { 
       throw (fe); 
      } 
     } 
    } 
} 
+0

生徒は4 GPAまたは5 GPAですか?ユーザーが入力したint値が、なぜこの種の検証をしたいのかをdoubleに変換できるのであれば? –

+0

'stuGpa' ** IS ** a double。何が問題なのですか?あなたは 'int'が' double'に変換可能であることを認識しており、入力を 'double'フィールドに格納していると述べています。したがって、入力が「二重」であることをすでに確認しています。 –

+0

https://stackoverflow.com/questions/12550184/throw-a-format-exception-c-sharp – Naidu

答えて

0

私はあなたがGetType()メソッドを使用できると思います。

var x=10; 
x.GetType(); => int 
var x=10.0; 
x.GetType(); => double 
1

私はあなたが入力がダブルでなければならないと言うとき、あなたは4.0の代わりに、4のように、小数点を持つように入力を期待している、それは奇妙な要件のようなものですが、それであれば、あなたが探しているものを想定していますあなたはこのようなことをすることでそれを達成することができます。そこより良い選択肢かもしれませんが、これはまた、それを

if (!(Double.TryParse(stuGPAString, out stuGpa) && stuGPAString.LastIndexOf(".") < (stuGPAString.Length - 1))) 
{ 
    throw new FormatException("Invalid gpa"); 
}; 

を行いますが、あなただけの検証したい場合はGPAはダブルであれば、その後、FormatExceptionをスローしない場合は、この

if (!Double.TryParse(stuGPAString, out stuGpa)) 
{ 
    throw new FormatException("Invalid gpa"); 
}; 

をので、使用したいですsetGPAメソッドは次のようになります

public void setGPA() 
    { 
     string stuGPAString; 

     if (!Double.TryParse(stuGPAString, out stuGpa)) 
     { 
      throw new FormatException("Invalid student gpa"); 
     }; 
    } 
関連する問題