2015-07-21 4 views
3

Я не уверен, что я просто устал и не вижу ничего очевидного или что-то не так с моей программой. В основном условие if 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 

, но не «активированы» или «ложь», даже несмотря на то, последний из которых является «1 0». Снова извините, если это глупый вопрос, и любое понимание или помощь будут очень признательны.

+0

Как и в сторону, а увеличивающиеся 'i' вручную внутри цикла, вы можете использовать цикл, чтобы сделать это вместо того, чтобы:' для (INT I = 0; я <= 8 ; i + = 2). Не то, чтобы это имело большое значение. –

ответ

9

Вы сравниваете символ против int. Проверка, которую вы пытаетесь, имеет совершенно иное значение, чем то, что вы пытаетесь выполнить. Вам нужно либо проверить, равно ли оно «1», либо перенести символ на int, чтобы вы могли сделать числовое сравнение.

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

Хорошо спасибо! вот что это было –

+4

Ну, «никогда не быть правдой» не совсем верно. Существует символ ASCII со значением 1. Это факт, что char возник как строковый символ вместо некоторого случайного 16-битного целого числа. В стороне, вы также можете вычесть магический «0x30», чтобы сделать значение ASCII для любой цифры (например, «0») в фактическом количестве, которое она представляет. – ryanyuyu

+0

@ryanyuyu fair point Я обновлю свой ответ –

2

Поскольку nextvaluebinary является String, это сравнение будет успешным, только если эта строка имеет нулевой символ, т.е. '\0':

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

Похоже, что вы ищете нулевую цифр символ а, вместо этого вы должны написать

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

Равенство используется с char to 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; 
    } 
Смежные вопросы