基本的にバイナリデータを作成/変換し、方程式に基づいて変更して保存し、出力をHTMLとしてエクスポートする関数を作成しようとしていました。切り捨てられたコードは次のとおりです。
/*
* Initialising list/list of list to store data strings.
*/
List<string> BitValues = new List<string>();
List<List<string>> DataList = new List<List<string>>();
/*
* Some Code.
*/
/*
* +=+=+=+=+=+=+=+=+=+=+=+=+=++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
* Mathematical Code Begins.
* =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
*/
List<string> strVal = new List<string>();
double avgVal = 0;
for (; ; )
{
foreach (string randBit in BitValues)
{
double decVal = Convert.ToDouble(Conversions.ToDecimal(randBit));
/*
* Implementing mathematical equation.
*/
double eqnValue = (0.52359) + (((1.04719) / Math.Pow(2.0, Convert.ToDouble(txtBitSize.Text)) * decVal));
avgVal += Math.Sin(eqnValue);
strVal.Add(Convert.ToString(Math.Sin(eqnValue)));
}
/*
* Calculating average value. Adding list to list.
*/
avgVal /= Convert.ToDouble(txtPopSize.Text);
DataList.Add(strVal);
List<string> NewStrVal = new List<string>();
if (GlobalVar.Extrema == 2)
{
for (int i = 0; i < BitValues.Count; i++)
{
if (avgVal <= Convert.ToDouble(strVal[i]))
{
NewStrVal.Add(BitValues[i]);
}
else
{
BitValues[i] = Conversions.ToComplement(Convert.ToInt32(BitValues[i]));
NewStrVal.Add(BitValues[i]);
}
}
DataList.Add(NewStrVal);
}
/*
* +=+=+=+=+=+=+=+=+=+=+=+=+=++=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
* File Writing Code Begins
* =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
*/
TextWriter tw = new StreamWriter("OUT.html");
foreach (IList<string> name in DataList)
{
tw.WriteLine(tableOuterStart);
tw.WriteLine(tableInnerOpen);
foreach (string listVal in name)
{
tw.WriteLine(DataInnerOpen);
tw.WriteLine(listVal);
tw.WriteLine(DataInnerClose);
}
tw.WriteLine(tableInnerClose);
tw.WriteLine(tableOuterClose);
}
tw.WriteLine(pageEnd);
/*
* Close stream
*/
tw.Close();
そして、これが適切な方法のクラスです。
public class Conversions
{
public static string ToDecimal(string BitValue)
{
string ConvertedToDecimal = Convert.ToInt32(BitValue, 2).ToString();
return ConvertedToDecimal;
}
public static string ToBinary(int DecimalValue)
{
string ConvertedToBinary = Convert.ToString(DecimalValue, 2);
return ConvertedToBinary;
}
public static string ToComplement(int n)
{
char[] b = new char[32];
int pos = 31;
int i = 0;
while (i < 32)
{
if ((n & (1 << i)) != 0)
b[pos] = '1';
else
b[pos] = '0';
pos--;
i++;
}
return new string(b);
}
}
このコードを実行しようとすると、無限ループに陥り、コードが終了することはありません。どこが間違っているのですか?ありがとう !