2017-07-20 2 views
-4

Ich habe versucht, einen einfachen GPA-Rechner zu machen, damit ich meine eigene Funktion aufgerufen gemacht beurteilen, welche die Klasse als String entgegen nimmt, und die Punkte als DoppelProgramm sagt Eingabezeichenfolge ist nicht in einem korrekten Format C#

double assess (ref string ppo) 
    { 
     string [] grade = new string [11] {"A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"}; 
     string [] num = new string [11] {"4", "3.67"," 3.33"," 3"," 2.67", "2.33", "2", "1.67", "1.33", "1"," 0"}; 
     int i; 
     for (i=0; i<12; i++) 
     { 
      if (ppo == grade [i]) 
      { 
       ppo=num[i]; 
       break; 
      } 
     } 
     return double.Parse(ppo, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo); 
    } 

Und es funktionierte gut alleine. Ich würde den Code verwenden, und es würde perfekt funktionieren, aber dann habe ich es in eine Schleife und es gab mir immer den gleichen Fehler sagen Input-String ist nicht in einem korrekten Format

Ich nahm den Code aus der Schleife, und es funktionierte gut, aber es funktioniert nicht, wenn ich es in der Schleife setzen

Program prog=new Program(); 
     int num=Convert.ToInt32(Console.ReadLine()); 
int z; 
for (z=0;z<num;z++) 
     { 
      point[z]=prog.assess(ref grade[z]); 
     } 
+1

Dann debug ... aber ein Breakpoint in der, wenn und sehen, was der Wert von PPO ist nach dem 'break' – EpicKip

+2

Arent Sie 12 Zahlen Looping (0, 1 , 3, ..., 11), während du nur 11 Zahlen in deinen Strings hast? – Noceo

+0

Lesen Sie [fragen] und erstellen Sie ein [mcve]. – CodeCaster

Antwort

0

Das Problem ist, weil einige Ihrer Werte von num Array ein weißes Leerzeichen enthält, und es kann nicht konvertiert werden double.

Entfernen Sie die weißen Flächen von den Werten des num Array oder Ihren Code ändern, eine Trim() auf dieser Linie einschließlich:

if (ppo == grade[i]) 
{ 
    ppo = num[i].Trim(); // Clean white spaces 
    break; 
} 

Als gute Praxis, können Sie auch Ihre for Schleife ändern, zu verwenden, die Länge des grade Array, wie folgt aus:

for (i = 0; i < grade.Length; i++) 
{ 
    if (ppo == grade[i]) 
    { 
     ppo = num[i].Trim(); // Clean white spaces 
     break; 
    } 
} 
Verwandte Themen