Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的代码运行for循环超过5次?_Java_For Loop - Fatal编程技术网

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

Java 为什么我的代码运行for循环超过5次?,java,for-loop,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个整数,然后将它们显示在一个条形图上。你把状态变化和图形混淆了paintComponent,在本

我问这个听起来很傻,但我的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个整数,然后将它们显示在一个条形图上。

你把状态变化和图形混淆了paintComponent,在本例中,swing确定它需要2次重新绘制,无论出于何种原因

如果程序的编写方式关心调用
paintComponent
的时间或频率,则可能会出现问题。相反,您应该只让
paintComponent
询问某些对象的当前状态并相应地进行绘制

根据您的具体情况,应通过以下方式之一提供5个数字

  • 传递给条形图的构造函数
  • 从BarGraph构造器中的用户处请求(不是我最喜欢的,但会起作用)
  • 传递给条形图的方法
  • 在传递给条形图的其他对象中
绝对不应从
paintComponent
内的用户处请求它们,这意味着每次需要重画时(例如,移动、重新调整大小、更改焦点、被其他帧隐藏等),都会从用户处重新请求数字


您也可能希望使用
super.paintComponent(g)
启动
paintComponent
方法,但罪魁祸首是
input.nextInt()。使用
input.nextLine()改为。比5多多少次?它应该只运行5次(如果不键入整数值作为输入,则运行次数应少于5次)。你确定你发布的代码吗?如果我运行你的代码,循环将执行5次。paintComponent由swing调用,在这种情况下,它似乎需要2次重新绘制。我个人不会因为这种原因而把图形和逻辑混为一谈
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);    
        }
    }
}
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 );
    }
}