2016-07-14 7 views
-2

FormatExceptionの問題があります。ここにコードがあります。このコードをコンパイルするには、これをどのように変更できますか?引数のフォーマットが無効 である場合、又は複合形式の文字列が十分に形成されていない場合にスローされるFormatExceptionが処理されていませんでしたfloat.Parse

private Tacka[] load() 
{ 
    ArrayList dataX = new ArrayList(); 
    ArrayList dataY = new ArrayList(); 

    var citac = new StreamReader(File.OpenRead(@"C:\Users\Marko\Documents\Visual Studio 2012\Projects\K-Means\s1.csv")); 
    var linija = citac.ReadLine(); 

    if (linija.StartsWith("%") || linija.StartsWith("@") || linija.StartsWith("/") || linija.Length == 0) 
    { 

    } 
    else 
    { 
     var values = linija.Split(' '); 
     dataX.Add(values[0]); 
     dataY.Add(values[1]); 
    } 
    Tacka[] nizTacaka = new Tacka[dataX.Count]; 
    //List<Tacka> tacka = new List<Tacka>(); 
    for (int i = 0; i < dataX.Count; i++) 
    { 
     //tacka.Add(new Tacka(float.Parse(dataX[i].ToString()), float.Parse(dataY[i].ToString()))); 
     nizTacaka[i] = new Tacka(float.Parse(dataX[i].ToString()), float.Parse(dataY[i].ToString())); 
    } 

    return nizTacaka; 
} 
+0

完全な例外(スタックトレースを含む)を投稿し、どのコード行が例外をスローしているかを示した場合に役立ちます。また、コードの違反行にある変数(つまり、 'dataX [i]'と 'dataY [i]')の値はどうですか? –

+0

'float.Parse'が' dataX [i] .ToString() 'や' dataY [i] .ToString() 'の変換に失敗していたことを願っています。 –

+0

行:nizTacaka [i] = new Tacka float.Parse(dataX [i] .toString())、float.Parse(dataY [i] .ToString())); – MTom

答えて

2

The exception。ここではあなたのケースでdataX[i].ToString()および/またはdataY[i].ToString()のどちらかが(それはnullEmpty、または数以外の文字である場合もある)float値に変換できないので、それがスローされた

。したがって、TryParseを使用してコンバージョンステータスを確認し、コンバージョンが正常な場合にのみオブジェクトを作成することができます。次のコードを試してください:

float xValue, yValue; 
for (int i = 0; i < dataX.Count; i++) 
{ 
    if (float.TryParse(dataX[i].ToString(),out xValue) && float.TryParse(dataY[i].ToString(),out yValue)) 
    { 
      nizTacaka[i] = new Tacka(xValue, yValue); 
    } 
    else 
    { 
    Console.WriteLine("Conversion failed"); 
    } 

} 
関連する問題