为什么 for 循环选择了错误的 IF 语句路径?

所以我正在做一个在线编码挑战,遇到了这个让我难过的问题:


这是我的代码:


 static void Main(String[] args)

        {

            int noOfRows = Convert.ToInt32(Console.ReadLine());


            for (int i = 0; i < noOfRows; i++)

            {

                string odds = "";

                string evens = "";


                //get the input word from console

                string word = Console.ReadLine();


                for (int j = 0; j < word.Length; j++)

                {

                    //if the string's current char is even-indexed...

                    if (word[j] % 2 == 0)

                    {

                        evens += word[j];                       

                    }

                    //if the string's current char is odd-indexed...

                    else if (word[j] % 2 != 0)

                    {

                        odds += word[j];

                    }                   

                }

                //print a line with the evens + odds

                Console.WriteLine(evens + " " + odds);

            }

        }


本质上,这个问题要我从控制台行获取字符串并在左侧打印偶数索引字符(从 index=0 开始),后跟一个空格,然后是奇数索引字符。


所以当我尝试“Hacker”这个词时,我应该看到打印为“Hce akr”的行。当我调试它时,我看到代码成功地将字母'H'放在左边(因为它是index = 0,因此是偶数),并将字母'a'放在右边(奇数索引)。但是当它到达字母“c”时,它不是通过第一个 IF 路径(偶数索引),而是跳过它并转到奇数索引路径,并将其放在右侧?


有趣的是,当我尝试“Rank”这个词时,它工作正常并打印出正确的语句:“Rank”,但其他词却没有。


我得到不同的结果真是奇怪。


我错过了什么?


素胚勾勒不出你
浏览 102回答 3
3回答

慕哥6287543

word[j]是字符串中的一个字符;j是您要检查其均匀度的索引。

蝴蝶刀刀

if (j%2)应该提供正确的路径。您使用的if( word[j] %2)是对字符而不是索引进行模块化运算。最有可能对 ASCII 值使用模数。希望这可以帮助。

繁星点点滴滴

你想检查索引是否偶数,但你比较word[j] % 2 == 0哪个不是索引。你应该做什么:if(j&nbsp;%&nbsp;2&nbsp;==&nbsp;0){ }
打开App,查看更多内容
随时随地看视频慕课网APP