java - 循环是否卡在某处?

标签 java loops for-loop

我的代码不会按照我想要的方式执行。我在整个 actionPerformed 类中放置了一些 println 语句,我认为它卡在了 foe 循环的末尾,因为它只执行了一次 if 语句。我可能忽略了一些巨大的东西,你能看到哪里出了问题吗?

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;


    public class Frame extends JFrame implements ActionListener{

        public JPanel contentPane;
        public int yesNum, noNum;
        public JProgressBar progressBar;

    //  ######### CONFIG ##########
        public int genNum = 100_000;
    //Edit genNum to change number of tries


        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            try {
                UIManager.setLookAndFeel("com.apple.laf.AquaLookAndFeel");
            } catch (Throwable e) {
                e.printStackTrace();
            }
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Frame frame = new Frame();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }

        /**
         * Create the frame.
         */
        public Frame() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 300, 195);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(null);

            JLabel lab = new JLabel("Click to generate " + genNum + " times");
            lab.setHorizontalAlignment(SwingConstants.CENTER);
            lab.setBounds(5, 5, 289, 16);
            contentPane.add(lab);

            JButton b = new JButton("Generate");
            b.setIcon(new ImageIcon("/Users/Colby/Desktop/checl.png"));
            b.setActionCommand("Generate");
            b.setBounds(80, 33, 139, 36);
            contentPane.add(b);

            JLabel yesLab = new JLabel("Yes Number: " + yesNum);
            yesLab.setBounds(22, 81, 117, 16);
            contentPane.add(yesLab);

            JLabel noLab = new JLabel("No Number: " + noNum);
            noLab.setBounds(22, 109, 117, 16);
            contentPane.add(noLab);

            progressBar = new JProgressBar();
            progressBar.setStringPainted(true);
            progressBar.setBounds(5, 141, 289, 20);
            progressBar.setMaximum(genNum);
            contentPane.add(progressBar);

            b.addActionListener(this);

        }

        public void actionPerformed(ActionEvent e){
            Random rand = new Random();
            int num = rand.nextInt(1);
            int yesCounter = 0;
            int noCounter = 0;

            for(int counter = 1; counter < 100_000;){
                if(num == 0){
                    System.out.println("testing yes");
                    yesCounter++;
                    System.out.println(counter+ ": Yes");
                    progressBar.setValue(counter);

                } else if(num == 1){
                    System.out.println("testing no");
                    noCounter++;
                    System.out.println(counter+ ": No");
                    progressBar.setValue(counter);
                }
                    num = rand.nextInt();
                }

            yesCounter = yesNum;
            noCounter = noNum;


        }
    }

最佳答案

for(int counter = 1; counter < 100_000;    )
                                       ^^^

您错过了迭代步骤,您应该在那里增加 counter (++counter)。

此外,像您这样的长阻塞任务不应该在 EDT 中执行。 ,它应该有自己的Thread,因为您正在使用 gui。

关于java - 循环是否卡在某处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713104/

相关文章:

java - 生命游戏,方法行不通

java - 带有内嵌图像的 html 电子邮件在 iPhone 6s 中显示垃圾字符,但在 iPhone 5s 中不显示,通过 JAVA 发送电子邮件

java - 为什么dimen资源不一致以及如何获取正确的值?

swift - 'for index'与传统 'for loop'的区别

python - 创建一个 python 循环,其中输入是随机数

javascript - 在 for 循环中每两个 block 打印数字

HTML 中的 PHP 简单 for 循环 (Codeigniter)

java - 具有规范、分页和标准获取连接的 Spring Data JPA 存储库

java - 捕获错误输入异常

c# - 按列表 C# 中的值过滤/迭代列表