Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
First try-C#中十进制到二进制的代码,带有循环和列表<&燃气轮机;_C#_Loops_Binary - Fatal编程技术网

First try-C#中十进制到二进制的代码,带有循环和列表<&燃气轮机;

First try-C#中十进制到二进制的代码,带有循环和列表<&燃气轮机;,c#,loops,binary,C#,Loops,Binary,我是C#方面的新手,但我曾尝试编写将十进制转换为二进制的代码,我知道还有很多其他方法,可能还有很多更简单的方法,但我只是想尝试这种方法-使用列表。有人能告诉我我做错了什么吗? 谢谢 static void Main(字符串[]args) { long decimalNum=long.Parse(Console.ReadLine()); 长除数=小数位数; List BinaryResult=新列表(); for(int i=0;divideNumber==0;i++) { long divide

我是C#方面的新手,但我曾尝试编写将十进制转换为二进制的代码,我知道还有很多其他方法,可能还有很多更简单的方法,但我只是想尝试这种方法-使用列表。有人能告诉我我做错了什么吗? 谢谢

static void Main(字符串[]args)
{
long decimalNum=long.Parse(Console.ReadLine());
长除数=小数位数;
List BinaryResult=新列表();
for(int i=0;divideNumber==0;i++)
{
long divideBytwo=divideNumber%2;
如果(除以二==1)
{
添加(“1”);
}
如果(除以二==0)
{
添加(“0”);
}
除数/=2;
}
for(int i=0;i
是否有一种方法也可以使用整型列表或。。我完全错了吗

有几件事:

  • 在第一个
    for
    循环中,
    divideNumber==0
    与您想要的相反:它表示只要
    divideNumber
    为零,您就希望循环运行,而您真正想要的是循环运行到
    divideNumber
    为零为止。尝试
    divideNumber!=0

  • 在第二个
    for
    循环中,如果
    BinaryResult
    包含任何数据,您将得到一个越界异常。您正在尝试读取索引1到
    x
    (其中
    x
    是列表中的项数),而有效索引是0到
    x-1
    。您可以修复索引,或者因为您正在以与创建索引相反的顺序访问元素,所以您可能会发现使用列表而不是
    列表更直观


  • 如果您只需要将数字转换为二进制,请使用此选项:

    int value = 8;
    string binary = Convert.ToString(value, 2);
    

    一个可能的解决方案可能是使用@Joe建议的堆栈。我还使用了字符串生成器,而不是使用字符串列表。请记住,我也在学习C#,所以我的答案可能不是最好的

    static void Main(string[] args)
    {   
        long decimalNum = long.Parse(Console.ReadLine());
        StringBuilder sb = new StringBuilder();
    
        Stack<String> BinaryResult = new Stack<string>();
    
        while (decimalNum > 0)
        {
            var rem = decimalNum%2;
            BinaryResult.Push(rem.ToString());
            decimalNum = decimalNum/2;
        }
    
        while (BinaryResult.Count > 0)
        {
            sb.Append(BinaryResult.Pop().ToString());
        }
    
        Console.WriteLine(sb.ToString());
        Console.ReadLine();
    }
    
    static void Main(字符串[]args)
    {   
    long decimalNum=long.Parse(Console.ReadLine());
    StringBuilder sb=新的StringBuilder();
    Stack BinaryResult=新堆栈();
    while(小数点>0)
    {
    var rem=小数%2;
    BinaryResult.Push(rem.ToString());
    小数位数=小数位数/2;
    }
    而(BinaryResult.Count>0)
    {
    sb.Append(binarysult.Pop().ToString());
    }
    Console.WriteLine(sb.ToString());
    Console.ReadLine();
    }
    
    你为什么认为自己做错了什么?有些东西不起作用了吗?请编辑问题,提供所有必要的信息,特别是发生了什么、应该发生什么以及可能出现的错误。
    static void Main(string[] args)
    {   
        long decimalNum = long.Parse(Console.ReadLine());
        StringBuilder sb = new StringBuilder();
    
        Stack<String> BinaryResult = new Stack<string>();
    
        while (decimalNum > 0)
        {
            var rem = decimalNum%2;
            BinaryResult.Push(rem.ToString());
            decimalNum = decimalNum/2;
        }
    
        while (BinaryResult.Count > 0)
        {
            sb.Append(BinaryResult.Pop().ToString());
        }
    
        Console.WriteLine(sb.ToString());
        Console.ReadLine();
    }