黑马程序员技术交流社区
标题:
定义变量问题!
[打印本页]
作者:
袁振龙
时间:
2013-4-14 16:05
标题:
定义变量问题!
本帖最后由 袁振龙 于 2013-4-14 20:57 编辑
int sum=0;
for (int i=0;i<5 ;i++ )
{
Console.WriteLine("请输入第{0}人的年龄:",i+1);
try
{
int age = Convert.ToInt32(Console.ReadLine());
if (age <0||age > 100)
{
Console.WriteLine("你输入的年龄不合法");
break;
}
sum += age;
}
catch
{
Console.WriteLine("请输入合法的年龄");
break;
}
}
Console.WriteLine("平均年龄是:{0}", sum / 5); Console.ReadKey();
for (int i=0;i<5 ;i++ )
{
int sum=0;
Console.WriteLine("请输入第{0}人的年龄:",i+1);
try
{
int age = Convert.ToInt32(Console.ReadLine());
if (age <0||age > 100)
{
Console.WriteLine("你输入的年龄不合法");
break;
}
sum += age;
}
catch
{
Console.WriteLine("请输入合法的年龄");
break;
}
}
Console.WriteLine("平均年龄是:{0}", sum / 5); Console.ReadKey();
为什么sum定义在for外面就正确输出,定义在for里面就出错?有什么区别吗? 还有就是为什么输入错误的东西,但是程序还是输出平均成绩?
作者:
梁思思
时间:
2013-4-14 16:10
这涉及到变量作用域问题。
变量的作用域:变量只能在声明它的那个大括号内使用,在声明它的那个大括号外面就无法访问了。
你定义在for外面,都可访问到。而定义在for里面,只能在那个for循环里才能访问,出了那个for循环就访问不到了。
作者:
殇_心。
时间:
2013-4-14 16:32
第一个关于sum的问题,1楼已经给出很好解释了。 就是变量作用域问题。
第二个是因为
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
不知道你为什么要用这。。 估计你理解错了吧。 你详细看看try catch 用法吧。
如果你输入错误的话,而你的代码处理仅仅只是退出了循环而已。没有进行别的任何处理。
作者:
曾玉锋
时间:
2013-4-14 16:52
1.楼上的同学已经说到了,变量的作用域只能在声明它的那个大括号内使用,定义在for循环里面,则每一次 i 改变,进行下一次循环的时候,都会将sum销毁,重新创建一个新的变量sum并赋值为0;所以,sum只在当前循环中有效。得出的结果,与想象中的也就有差别。
2.你对 int age = Convert.ToInt32(Console.ReadLine());进行了try{}catch{}操作,当用户输入的不是数字时,转换失败,程序直接跳到catch{},输出,"你的输入不合法",并结束for循环,执行求平均操作。如果要输入错误的时候就结束,请将break改为return 即可(return 可结束方法).
作者:
张大海
时间:
2013-4-14 17:01
第一个问题就是关于变量SUM的访问级别的问题,顶1楼已经给出了答案;
第二个问题就是关于输出平均年龄的了,这是因为你没有对Console.WriteLine("平均年龄是:{0}", sum / 5);语句进行限制,可以参考:
int sum=0;
bool fag = false;
for (int i=0;i<5 ;i++ )
{
Console.WriteLine("请输入第{0}人的年龄:",i+1);
try
{
int age = Convert.ToInt32(Console.ReadLine());
if (age <0||age > 100)
{
Console.WriteLine("你输入的年龄不合法");
fag = false;
break;
}
sum += age;
fag = true;
}
catch
{
Console.WriteLine("请输入合法的年龄");
fag = false;
break;
}
}
if (fag )
{
Console.WriteLine("平均年龄是:{0}", sum / 5);
}
Console.ReadKey();
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2