if判断里面为什么不对?判断因该没问题,输入后在if里面打印输出是纯数字。改remove最后遍历会出数字。

//从键盘接收一个字符串,将其中的所有数字字符去除后,显示; Console.WriteLine("请输入一组数字"); List<char> list = Console.ReadLine().ToList(); for (int i = 0; i < list.Count; i++) { if (list[i] >= '0' && list[i] <= '9') { list.RemoveAt(i);//?? } } foreach (char c in list) { Console.Write(c); }

问题不是在if判断中,而是出在使用remove方法去除数字字符。

主要原因是:使用List.RemoveAt()方法移除该字符,但是该方法会使后面的字符向前移动,导致部分数字字符被忽略或者重复输出,所以不能直接在循环中移除列表中的元素。

更具体点说:当判断数字字符2时,i=5,使用removeAt(5)后,直接导致list变为ewqrf34r,此时list[5]是3。再次进入循环,i++,i变为6,此时list[6]是4,removeAt(6)后,list变为ewqr3r。该过程中数字字符3前移,从而导致3被忽略。

解决办法:可以定义一个新的字符串result,若判断不是数字,则result+=list[i]。

或者换一个方式实现,如下:

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网