0

基本的にバイナリデータを作成/変換し、方程式に基づいて変更して保存し、出力を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);
        }
    }

このコードを実行しようとすると、無限ループに陥り、コードが終了することはありません。どこが間違っているのですか?ありがとう !

4

1 に答える 1

5

無限ループをコーディングしました。

for (; ; )

それが無限に実行されることになぜあなたは驚いていますか?

それを削除するか、非無限にするかbreak、必要に応じて削除します。

于 2013-01-01T20:26:37.220 に答える