日期:2014-05-20  浏览次数:20661 次

这段代码为什么有这样的问题?
代码如下:
for (int i=0;i<8;i++)
  for(int j=0;j<8;j++)
  {
  char c=' ';
  System.out.println("INPUT:");
  try{
  c=(char)System.in.read();
  }catch(IOException e){}
  if(c=='1')
  {
  System.out.print(OK!);
  }
  else 
  j--;
  }

编译运行时,第一次出现一次INPUT,输入一个字符后出现三个INPUT,为什么?


------解决方案--------------------
我来分析一下
public static void main(String[] args) {
for (int i=0;i <8;i++) 
for(int j=0;j <8;j++) 

char c= ' '; 
System.out.println("INPUT:"); a
try{ 
c=(char)System.in.read(); b[color=#FF99CC][/color]
}catch(IOException e){} 
if(c== '1') 

System.out.print("OK!"); c[color=#FF6600][/color]
}else
j--; //感觉这个地方是写错了吧
}
}

函数执行到a时,首先输出了INPUT,然后接受键盘输入,接下来的处理过程是:
1.假设我们输入的字符是 2,肯定还有一个enter;实际上是两个键,程序运行如下:
1.1 读入'2',此时输出一个 INPUT ;
1.2 读入enter,此时输出一个 INPUT;
1.3 执行循环到b处,等待输入,此过程又输出一个 INPUT;
程序结果是三个 INPUT
2.假设我们输入的字符是 1,也要有enter;仍旧是两个键,程序运行如下:
2.1 读入'1',此时输出一个 INPUT ;
2.2 判定是'1',输出一个 OK!;
2.3 读入enter,此时输出一个 INPUT;
2.4 执行循环到b处,等待输入,此过程又输出一个 INPUT;
程序结果是三个 OK! INPUT: INPUT: INPUT:
3.假设输入enter;是一个键,程序运行如下:
3.1 读入enter,此时输出一个 INPUT;
3.2 执行循环到b处,等待输入,此过程输出一个 INPUT;
程序结果是 INPUT: INPUT:

lz不清楚问题的所在就是对IO上概念不够清晰,我也遇到过类似的问题,希望能对你有所帮助。
ps:我是菜鸟,共同学习
------解决方案--------------------
结果:
INPUT:
1
OK!INPUT: -------A
INPUT: -------B
INPUT: -------C

输入1,成功读到1,所以打印出OK
AInput读到的是\r,所以继续循环
BInput读到的是\n,继续循环
CInput停止不动,等待键盘输入。


这个程序没什么意思呀。