2015-07-21 80 views
3

我不确定我是否真的很累,并且缺少明显的东西或者我的程序有问题。基本上我的if语句条件不起作用。如果陈述不起作用C#

public bool check(string nextvaluebinary) 
     { 
      bool test = true; 

      for (int i = -1; i < 8; ++i) 
      { 
       i++; 
       System.Console.WriteLine(nextvaluebinary[i] + " " + nextvaluebinary[i + 1]); 
       if (nextvaluebinary[i] == 1) 
       { 
        System.Console.WriteLine("Activated"); 
        if (nextvaluebinary[i + 1] == 0) 
        { 
         test = false; 
         System.Console.WriteLine("false"); 
        } 
       } 
       else 
       { 
        test = true; 
       } 

       if (test == false) 
       { 
        break; 
       } 
      } 

      return test; 
     } 

我传递字符串0001010110并即时得到的输出:

0 0 
0 1 
0 1 
0 1 
1 0 

但没有“激活”或“假”,即使最后一个是“10”。再次对不起,如果这是一个愚蠢的问题,任何见解或帮助将不胜感激。

+0

作为题外话,代替手动递增'i'在循环内,则可以使用用于循环要做到这一点,而不是:'用于(INT I = 0;我<= 8 ; i + = 2)'。并不是说它有很大的不同。 –

回答

9

你正在比较一个字符与int。您试图检查的内容与您尝试完成的内容完全不同。您需要检查它是否等于'1'或将char转换为int,以便进行数字比较。

if (nextvaluebinary[i] == '1') 
+0

好的,谢谢!那就是它的样子 –

+4

“永远不会是真的”并不完全正确。有一个值为1的ASCII字符。这是事实上,字符起源为一个字符串字符,而不是一些随机的16位整数。顺便说一下,你也可以减去一个神奇的'0x30'来将任何数字(比如'0')的ASCII值写入它所代表的实际数字中。 – ryanyuyu

+0

@ryanyuyu公平点我会更新我的答案 –

2

由于nextvaluebinaryString,这种比较会成功仅当字符串有一个空字符,即'\0'

if (nextvaluebinary[i + 1] == 0) 

看起来你正在寻找一个零数字字符,相反,所以你应该写

if (nextvaluebinary[i + 1] == '0') 
0

Equals与char一起使用int 。所以这将使用char代码。

使用此

public static bool check(string nextvaluebinary) 
    { 
     bool test = true; 

     for (int i = -1; i < 8; ++i) 
     { 
      i++; 
      System.Console.WriteLine(nextvaluebinary[i] + " " + nextvaluebinary[i + 1]); 
      if (nextvaluebinary[i] == '1') 
      { 
       System.Console.WriteLine("Activated"); 
       if (nextvaluebinary[i + 1] == '0') 
       { 
        test = false; 
        System.Console.WriteLine("false"); 
       } 
      } 
      else 
      { 
       test = true; 
      } 

      if (test == false) 
      { 
       break; 
      } 
     } 

     return test; 
    }