package mygradeloops;
import java.io.IOException;
public class MyGradeLoops {
public static void main(String[] args) throws IOException {
char x = 'A';
for (x='0';x<'9';x++){
System.out.println("Please enter in one of your grades.");
System.in.read();
System.out.println("Keep going!");
}
}
}
此代码在第一个&#34;等级&#34;之后保持双重打印。有谁知道它为什么双印刷?我完成了&#34; For Loop&#34;错?
答案 0 :(得分:0)
它&#34;双面印刷&#34;因为当你按回车输入一个字符时,你实际上写了两个字符:你输入的字符和\n
(换行符)。
添加第二个System.in.read();
调用以阅读换行符:
for (x='0';x<'9';x++){
System.out.println("Please enter in one of your grades.");
System.in.read(); // your character
System.in.read(); // newline
System.out.println("Keep going!");
}
此外,在不需要的情况下将x
初始化为'A'
,char x;
也没问题。事实上,在此循环中使用char
是没有意义的,使用int
将是首选。
答案 1 :(得分:0)
read
的{{1}}方法(System.in
)只从输入流中读取一个字节的数据。因为你必须点击&#34;输入&#34;要将输入发送到流,您在流中有两个字符 - 您键入的字符加上换行符。
InputStream
循环循环两次,&#34;双重打印&#34; for
和Keep going!
因为每次迭代都会读取流中的两个字符之一。
将Please enter in one of your grades.
包裹在System.in
然后InputStreamReader
或仅使用BufferedReader
初始化Scanner
会更容易。使用System.in
,您只需拨打BufferedReader
,使用readLine()
即可拨打Scanner
。
此外,还不清楚为什么要使用nextLine()
从'0'
循环到'9'
。对char
使用int
并从a
循环到0
会更清楚。