A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海枫 中级黑马   /  2014-5-19 16:18  /  2277 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 海枫 于 2014-5-19 20:09 编辑

写一个方法,用来读取用户在控制台输入的数字,如果是数字,则打印这个数字的二倍,如果不是数字,则提示用户重新输入,直到是数字为止。*/
        static void Main(string[] args)
        {
            int a=-1;
            Console.WriteLine("请输入一个数字,我们将打印这个数字的二倍");   
            while (true)
            {               
                string str = Console.ReadLine();
                if (int.TryParse(str, out a))
                {
                    int b = Convert.ToInt32(str);
                    Console.WriteLine("您输入数字的二倍是{0}", b * b);
                    break;
                }
                else
                {
                    Console.WriteLine("输入有误,请重新输入");
                }
               
            }
            Console.ReadKey();
为什么我把break换成 Console.ReadKey();,把最后的 Console.ReadKey();删掉不行呢?

评分

参与人数 1技术分 +1 收起 理由
张旭辉 + 1

查看全部评分

15 个回复

倒序浏览
if (int.TryParse(str, out a))    这类型的  你为什么要用到这么高级呢?   
回复 使用道具 举报
首先你写的是死循环,没有break,是没法跳出的,所以一定不能少break;
回复 使用道具 举报
本帖最后由 伪善者。 于 2014-5-19 17:14 编辑

1 你的循环条件是true 如果内部没有一个break用来跳出循环的话这就是各死循环
   可以设置断点调试一下 如果你把break换成console.readkey的话 那就会在readkey
   之后无线循环下去。所以true为判断条件的情况一定要有break用来跳出
2 可以删掉,最后一个是为了让程序停在那里不至于一闪而过,当然你有硬化氪金写轮眼的
   话是可以省略哈哈。
3  一个数字的2倍好像是.b+b...{:3_46:}

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
第一个错误是  Console.WriteLine("您输入数字的二倍是{0}", b * b);,应该是b*2,要不是平方了.
第二个错误是 if (int.TryParse(str, out a))
                {
                    int b = Convert.ToInt32(str);
                    Console.WriteLine("您输入数字的二倍是{0}", b * b);
                    break;
                }红色部分是多余的,tryParse方法中out a就是用来存放转换成功的值的
Console.WriteLine("您输入数字的二倍是{0}", 2*a);这样就可以了
第三个问题是while(true)是一定要有break语句退出循环的,否则会一直循环下去
最后的Console.readkey()是为了防止程序一结束就立刻退出,来不及看
如果你把break和Console.readkey()交换了,不但程序无法退出,循环里会因为
独到的是键盘值而间隔的出现输入有误的现象.
应该就有这么多问题,希望可以帮到你:)






评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
楼上的貌似都没怎么看懂楼主的代码,楼主用TryParse判断输入是否整形是没错的,楼上说没break请麻烦回去再看一下。楼主最主要的问题是判断错误,楼主用out a做为返回值却判断的是没这个参数的方法返回值。说白了就是楼主用的方法返回的是int型 如果输入正确返回的是输入值 否则返回的是0 楼主应该判断返回值是否是0.而且楼主要做输入值放大2倍貌似做成了平方值。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
海枫 中级黑马 2014-5-19 20:04:20
7#
方杰斌 发表于 2014-5-19 16:24
if (int.TryParse(str, out a))    这类型的  你为什么要用到这么高级呢?

那怎么判断输入的是否为数字呢?
回复 使用道具 举报
海枫 发表于 2014-5-19 20:04
那怎么判断输入的是否为数字呢?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication17
{
    class Program
    {
        static void Main(string[] args)
        {
            TT t = new TT();
            string s = Console.ReadLine();
            if (t.b(s))
            {
                Console.WriteLine("验证通过!");
            }
            else
            {
                Console.WriteLine("输入的数字中含有非数字,请重新输入!");
            }
        }
        private class TT
        {
            public bool b(string s)
            {
                string pattern = "^[0-9]*$";
                Regex rx = new Regex(pattern);
                return rx.IsMatch(s);
            }

        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
海枫 中级黑马 2014-5-19 20:07:23
9#
姜饼不甜 发表于 2014-5-19 17:21
第一个错误是  Console.WriteLine("您输入数字的二倍是{0}", b * b);,应该是b*2,要不是平方了.
第二个错误 ...

谢谢,你说的很对!
回复 使用道具 举报
通过大家的见解,已改正了我写的程序,谢谢各位了!
回复 使用道具 举报
方杰斌 发表于 2014-5-19 20:06
using System;
using System.Collections.Generic;
using System.Linq;

好吧,正则表达式还不太会用,谢谢你的讲解,学习了!
回复 使用道具 举报
海枫 发表于 2014-5-19 20:11
好吧,正则表达式还不太会用,谢谢你的讲解,学习了!

这个 不用 正则表达式 也可以  

public bool isnumeric(string str)
{
char[] ch=new char[str.Length];
ch=str.ToCharArray();
for (int i = 0; i < ch.Length;i++ )
{
if (ch < 48 || ch > 57)
{
return false;
}
}
return true;
}
回复 使用道具 举报
--_— 来自手机 中级黑马 2014-5-19 23:56:49
13#
(int.TryParse(str, out a)这个方法表示很少见
回复 使用道具 举报
--_— 发表于 2014-5-19 23:56
(int.TryParse(str, out a)这个方法表示很少见

这个用来判断输入的字符串是否能转换为数字比 try-catch或者上面方的那两种办法不都简便吗
回复 使用道具 举报
可以这样换,能得到结果,只不过循环结束不了,会一直提示输入,用Break就可以最后跳出循环
回复 使用道具 举报
就是,弄成平方了,稍微一个地方没注意,你还是按F11跟着调试走,这样清楚很多。要学会调试。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马