【问题标题】:What's wrong with For Loop?For循环有什么问题?
【发布时间】:2014-12-01 23:25:51
【问题描述】:
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!");


        }   
    }   
}

此代码在第一个“等级”之后保持重复打印。有谁知道为什么它会重复打印?我做错了“For Loop”吗?

【问题讨论】:

  • 双面打印什么?
  • 不清楚你的问题是什么。你能提供你的程序的示例输出吗?

标签: java loops for-loop


【解决方案1】:

这是“双重打印”,因为当您按回车键输入字符时,实际上是在写入两个字符:您输入的字符和\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

【讨论】:

  • 这实际上回答了我的问题,并帮助了程序。非常感谢,也感谢所有能回答的人!我很抱歉不能更清楚,这是我第一次来这里。
【解决方案2】:

System.inInputStream)的read 方法仅从输入流中读取一个字节的数据。因为您必须点击“Enter”才能将输入发送到流中,所以流中有两个字符 - 您输入的字符加上换行符。

for 循环循环两次,并且“两次打印”Keep going!Please enter in one of your grades.,因为每次迭代都会读取流中的两个字符之一。

System.in 包装在InputStreamReader 然后BufferedReader 或者只是用System.in 初始化Scanner 会更容易。使用BufferedReader,您只需调用readLine(),使用Scanner,您可以调用nextLine()

此外,还不清楚您为什么使用chars 从'0' 循环到'9'。将int 用于a 并从0 循环到9 会更清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多