黑马程序员技术交流社区

标题: 这段代码不用 goto 怎么做 ? [打印本页]

作者: 秦二江    时间: 2013-5-20 08:53
标题: 这段代码不用 goto 怎么做 ?
本帖最后由 秦二江 于 2013-5-24 06:36 编辑

// 去掉重复字符
Console.WriteLine("请输入");
            // 1. 接收用户输入
            string str = Console.ReadLine();
            //2. 将用户输入 转换成 char 数组
            char[] strchar = str.ToCharArray();
            //3. 定义一个 字典集合 用来接收 去掉用户输入的重复 的字符 后的 字符  
            Dictionary<int, char> dic = new Dictionary<int, char>();
            //4. 用循环 来让前面 的字符 跟 后面的字符 依次相比 一直到最后一个
            for (int i = 0; i < strchar.Length; i++)
            {
                //5. 在 char 下标 范围内 执行 if 结构
                if ((i + 1) < strchar.Length)
                {
                    //6. 一开始 就有 连续相等( 像   wwwwfedf 这样 )
                    if (strchar == strchar[i + 1])
                    {
                        //7. 跳过 本次循环,从第二个字符开始 再次循环 即 跳到 4.
                        continue;
                    }
                }

                // 执行到这里 说明 前面没有 相等 ( wwwfedf    即执行到 该让 w 一次于后面的字符相比    )
                for (int j = i + 1; j < strchar.Length; j++)
                {
                    // 如果 后面仍然有相等的 则执行 if 结构
                    if (strchar == strchar[j])
                    {
                        // 有相等 ,跳到 aa 标签处 结束 这个子符的 相比  
                        goto aa;

                    }


                }

                //( 即 我想取  重复字符中 的最后一个 ,最后一个才会添加 到集合 中)
                dic.Add(i, strchar);

            aa: ;

            }

            // 去掉 重复字符 后 的所有字符 都被添加到 字典集合中了,现在遍历 字典集合 ,输出到控制台
            foreach (KeyValuePair<int, char> w in dic)
            {
                Console.Write(w.Value);
            }

            Console.ReadKey();

作者: 刘赛    时间: 2013-5-20 09:14
  1.            for (int i = 0; i < strchar.Length; i++)
  2.             {
  3.                 //5. 在 char 下标 范围内 执行 if 结构
  4.                 if ((i + 1) < strchar.Length)
  5.                 {
  6.                     //6. 一开始 就有 连续相等( 像   wwwwfedf 这样 )
  7.                     if (strchar == strchar[i + 1])
  8.                     {
  9.                         //7. 跳过 本次循环,从第二个字符开始 再次循环 即 跳到 4.
  10.                         continue;
  11.                     }

  12.                 }

  13.                 // 执行到这里 说明 前面没有 相等 ( wwwfedf    即执行到 该让 w 一次于后面的字符相比    )
  14.                 for (int j = i + 1; j < strchar.Length; j++)
  15.                 {
  16.                     // 如果 后面仍然有相等的 则执行 if 结构
  17.                     if (strchar != strchar[j])
  18.                     {
  19.                        //( 即 我想取  重复字符中 的最后一个 ,最后一个才会添加 到集合 中)
  20.                 dic.Add(i, strchar);

  21.                     }


  22.                 }

  23.                
  24.            
  25.             }

复制代码
不知道这样行不行
作者: 郎吉祥    时间: 2013-5-20 12:24
本帖最后由 郎吉祥 于 2013-5-20 12:29 编辑

  for (int i = 0; i < strchar.Length-1; i++)
            {
                if (strchar == strchar[i + 1])
                {
                    if (i+1== strchar.Length - 1)
                    {
                        dic.Add(i+1, strchar[i+1]);
                    }
                    continue;
                }
                dic.Add(i, strchar);
             if (i + 1 == strchar.Length - 1)
                {
                    dic.Add(i + 1, strchar[i + 1]);
                }
            }
            我把2个for循环改了。这样就可以了。完全没必要用到goto这么麻烦,





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2