〖求助〗java代码.难以理解.
刚一朋友问了我一道关于java的问题,是这样的:要求用户输入一个字符("a" 或“b”),当用户输入后,程序根据用户输入给一个相应的提示。它的代码如下:package input;
public class yijian
{ public static void main()
throws Exception
{
char a;
System.out.print("请输入一个字符: ");
a=(char)System.in.read();
switch(a)/*根据输入的不同值给一个相应的提示,当然,
每输入一次,程序将给一个提示*/
{
case 'a':
System.out.println("你输入了A");
break;
case 'b':
System.out.println("你输入了B");
break;
default :
System.out.println("你选择了其它字符");
}
}
}
public class yijian
{ public static void main()
throws Exception
{
char a;
System.out.print("请输入一个字符: ");
a=(char)System.in.read();
switch(a)/*根据输入的不同值给一个相应的提示,当然,
每输入一次,程序将给一个提示*/
{
case 'a':
System.out.println("你输入了A");
break;
case 'b':
System.out.println("你输入了B");
break;
default :
System.out.println("你选择了其它字符");
}
}
}
毫无疑问,这段代码是正确的。
这段代码是这样工作的:当用户输入"a"或"b"时,程序提示你输入了相应的字符,当输入其它字符时,程序输出:"你选择了其它字符"
但他把问题改了一下:
要求用户输入一个字符,当用户输入之后,程序给出相应的提示后,又要求用户继续输入,直到用户输入“q"时才结束。
对此,他用了do while循环,程序代码如下:
package input;
public class yijian
{ public static void main()
throws Exception
{
char a;
do
{
System.out.print("请输入一个字符: ");
a=(char)System.in.read();
switch(a)/*根据输入的不同值给一个相应的提示,当然,
每输入一次,程序将给一个提示*/
{
case 'a':
System.out.println("你输入了A");
break;
case 'b':
System.out.println("你输入了B");
break;
default :
System.out.println("你选择了其它字符");
}
}while (a!='q');
}
}
public class yijian
{ public static void main()
throws Exception
{
char a;
do
{
System.out.print("请输入一个字符: ");
a=(char)System.in.read();
switch(a)/*根据输入的不同值给一个相应的提示,当然,
每输入一次,程序将给一个提示*/
{
case 'a':
System.out.println("你输入了A");
break;
case 'b':
System.out.println("你输入了B");
break;
default :
System.out.println("你选择了其它字符");
}
}while (a!='q');
}
}
这段代码看起来也没有什么问题,但一运行,问题就来了。
程序首先提示我输入一个字符,我便输入了 a
但它的输出却是:
请输入一个字符: a
你输入了A
请输入一个字符: 你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符:
你输入了A
请输入一个字符: 你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符:
如果你又输入了R
则输出是这样的:
请输入一个字符: a
你输入了A
请输入一个字符: 你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符: R
你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符:
你输入了A
请输入一个字符: 你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符: R
你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符: 你选择了其它字符
请输入一个字符:
由上面输出所知,程序的循环体是被执行了三次,但程序的代码中没有体现每次执行循环体要被执行三次呀!
这些代码在java虚拟机上运行的,为了检验,我特意将它复制到Microsoft Visual J#.NET中运行,居然也得出同样的结果!
我也不知道这其中的奥妙是什么,
请高手指点。
[此贴子已经被作者于2005-12-14 11:49:45编辑过]