You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java for循环提前终止问题:录入答案密钥的循环未达预期5次迭代

问题原因

你遇到的循环“提前终止”本质是BufferedReader的read()方法会读取输入流中所有字符,包括你输入时按下回车产生的换行符(Windows系统为\r\n两个字符,类Unix系统为\n单个字符)、输入时误打的空格等不可见控制字符,这些字符会被计入循环的读取次数:
比如你输入答案密钥时每输一个字符就按一次回车,那么每输入1个有效答案字符,就会对应1-2个换行控制字符被读入,5次循环实际上很快就被占满,视觉上就表现为你只输入了2-3个字符,循环就结束了。

修复方案

推荐方案:使用readLine()读取输入,过滤无效字符

readLine()会自动忽略末尾的换行符,你只需读取每行的第一个有效字符即可,修改后的核心代码如下:

public class quizscores
{ 
    public static void main(String[] args) throws IOException
    { 
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter no of participants");
        int n=Integer.parseInt(br.readLine());
        char arr[][]=new char[n][5];
        
        System.out.println("Please enter answer key");
        char ans[]=new char[5];

        for(int i=0;i<5;i++) 
        {
            // 读取整行,去除首尾空白后取第一个字符
            String line = br.readLine().trim();
            ans[i] = line.charAt(0);
        }
        
        System.out.println("please enter answers of participants ");
        for(int i=0;i<n;i++) {
            for(int j=0;j<5;j++) {
                String line = br.readLine().trim();
                arr[i][j] = line.charAt(0);
            }
        }
    }
}

备选方案:保留read(),每次读取后清空空白字符

如果你坚持使用read(),可以在每次读取到有效字符后,循环清空输入缓冲区中剩余的空白控制字符:

for(int i=0;i<5;i++) 
{
    char c;
    // 跳过所有空白字符,直到读到有效非空白字符
    do {
        c = (char) br.read();
    } while(Character.isWhitespace(c));
    ans[i] = c;
}

内容的提问来源于stack exchange,提问作者Tejasvini Goel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:36:01