为什么我的代码运行for循环超过5次?

时间:2014-04-01 15:03:31

标签: java for-loop

我这听起来真的很傻,但是我的for循环遇到了麻烦。

以下是我遇到问题的代码的一部分。

Scanner input = new Scanner( System.in);
int number;
for(int i = 0;i < 5;i++) {
  System.out.print("Enter 5 integers:");
  number = input.nextInt();
}

当我运行它时,打印输出循环次数超过5次。

public class BarGraph extends JPanel
{

    public void paintComponent( Graphics g )
    {

        Scanner input = new Scanner( System.in);
       // super.paintComponent(g);
        int number;

        for(int i = 0;i < 5;i++)
        {
             System.out.print("Enter 5 integers:");
        number = input.nextInt();
       // g.drawRect(10 * i, 10 * i, 100 * number, 10);    
        }
    }
}

运行BarGraphTest

public class BarGraphTest
{
    public static void main( String[] args)
    {
        BarGraph panel = new BarGraph();
        JFrame application = new JFrame();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        application.add( panel );
        application.setSize( 300, 300);
        application.setVisible( true );
    }
}

基本上我要做的是读取5个整数,然后在JPanel线上显示它们吧。

1 个答案:

答案 0 :(得分:4)

您已将状态更改与图形混合在一起。 paintComponent由swing "when it needs to be"调用,在这种情况下,Swing确定无论出于何种原因需要重新绘制。

如果您的程序是以关注paintComponent被调用的时间或频率的方式编写的,那么您可能会遇到问题。您应该只让paintComponent询问某个对象的当前状态并进行相应的绘制。

取决于您的具体情况,应以下列方式之一提供5个号码

  • 传递给BarGraph的构造函数
  • 在BarGraph的构造函数中请求用户(不是我最喜欢的,但会起作用)
  • 传递给BarGraph的方法
  • 在传递给BarGraph的其他对象中。

绝对不应该向paintComponent内的用户请求它们,这意味着每次重绘时(例如移动,重新调整大小,改变焦点,被其他帧隐藏等)数字将从用户那里重新请求。

您也可能希望使用paintComponent开始super.paintComponent(g)方法但will again be situation dependant