For Loop有什么问题?

时间:2014-12-01 23:25:51

标签: java loops for-loop

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;错?

2 个答案:

答案 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; forKeep 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会更清楚。