【问题标题】:How can I get the counter to work in this code?我怎样才能让计数器在这段代码中工作?
【发布时间】:2020-07-03 09:25:29
【问题描述】:

我想计算用户猜测正确数字所需的尝试次数,我怎样才能让计数器(在这种情况下为“i”)工作?我已经在 ationPerformed 中实现了它,但是即使多次按下按钮,它也只会计算一次。我该如何解决这个问题?

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.util.Random;

public class Zahlenraten{
    public static void main(String[] args) {
        
        JFrame f = new JFrame("Zahlenraten");
        f.setSize(500,500);
        //f.setLayout(null);
        
        JTextField t = new JTextField("");
        t.setBounds(95,10,150,30);
        f.addWindowFocusListener(new WindowAdapter() {
         
            public void windowGainedFocus(WindowEvent e) {
                t.requestFocusInWindow();
            }
        });
        
        
        JButton e = new JButton("Exit");
        e.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            System.exit(0);
            }
        });
        e.setBounds(300, 100, 100, 30);
        
        JLabel txt = new JLabel("Zahl eingeben:");
        txt.setBounds(10,10,150,30);
        
        Random r = new Random();
        int Zahl = r.nextInt(100-0+1);
        
        int i = 0;
        
        JButton b = new JButton("Prüfen");
        f.getRootPane().setDefaultButton(b);//Enter Key = button b
        b.addActionListener(new ActionListener() {
                @Override
            public void actionPerformed(ActionEvent e) {    
                
                i++;
                    
                String str = t.getText();
                int wert = Integer.parseInt(str);
                t.setText("");
                
                if(wert < Zahl) {
                    System.out.println("Der gesuchte Wert ist größer.");
                }
                if(wert > Zahl) {
                    System.out.println("Der gesuchte Wert ist kleiner.");
                }
                if(wert == Zahl) {
                    System.out.println("Der gesuchte Wert wurde gefunden!");
                }
            }
        });
        b.setBounds(10,100,100,30);
    
        JPanel p = new JPanel();
        p.setLayout(null);
        p.add(b);
        p.add(e);
        p.add(t);
        p.add(txt);
        f.add(p);
        f.setVisible(true);
        
    }
}

【问题讨论】:

  • 让它成为你的 Zahlenraten 类的静态类变量

标签: java counter


【解决方案1】:

使用以下解决方案

import javax.swing.*;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.ActionEvent;
    import java.util.Random;
    
    public class Zahlenraten{
        static int i = 0;
        public static void main(String[] args) {
            
            JFrame f = new JFrame("Zahlenraten");
            f.setSize(500,500);
            //f.setLayout(null);
            
            JTextField t = new JTextField("");
            t.setBounds(95,10,150,30);
            f.addWindowFocusListener(new WindowAdapter() {
             
                public void windowGainedFocus(WindowEvent e) {
                    t.requestFocusInWindow();
                }
            });
            
            
            JButton e = new JButton("Exit");
            e.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                System.exit(0);
                }
            });
            e.setBounds(300, 100, 100, 30);
            
            JLabel txt = new JLabel("Zahl eingeben:");
            txt.setBounds(10,10,150,30);
            
            Random r = new Random();
            int Zahl = r.nextInt(100-0+1);
            
            
            
            JButton b = new JButton("Prüfen");
            f.getRootPane().setDefaultButton(b);//Enter Key = button b
            b.addActionListener(evt -> {
                 i++;
                 
                 String str = t.getText();
                 int wert = Integer.parseInt(str);
                 t.setText("");
                 
                 if(wert!=Zahl) {
                     System.out.println("Der gesuchte Wert ist kleiner.");
                 }
                 if(wert == Zahl) {
                     System.out.println("Der gesuchte Wert wurde gefunden!");
                 }
            });
            b.setBounds(10,100,100,30);
        
            JPanel p = new JPanel();
            p.setLayout(null);
            p.add(b);
            p.add(e);
            p.add(t);
            p.add(txt);
            f.add(p);
            f.setVisible(true);
            
        }
    }

输出为

【讨论】:

  • 我已将 i 声明为静态,如下所示:“static int i = 0;”。但后来我得到错误:“参数 i 的非法修饰符;只允许 final”。我错过了什么吗?
【解决方案2】:

创建一个类似的接口:

Interface Counter{
      public static int count = 0;
}

然后调用计数器接口的属性

            b.addActionListener(new ActionListener() {
                @Override
            public void actionPerformed(ActionEvent e) {    
                
                Copunter.count++;
                    
                String str = t.getText();
                int wert = Integer.parseInt(str);
                t.setText("");
                
                if(wert  Zahl) {
                    System.out.println("Der gesuchte Wert ist kleiner.");
                }
                if(wert == Zahl) {
                    System.out.println("Der gesuchte Wert wurde gefunden!");
                }
            }
        });

【讨论】:

  • 插入接口时出现此错误:“此行有多个标记 - 接口无法解析为类型 - 语法错误,插入“;”以完成“我做错了吗?
  • 你在哪里插入接口??只需在同一目录中创建一个新文件作为 Interface 并将其命名为 Counter。
  • 我为界面创建了一个新文件,它可以工作。起初我把它写在主文件中,那是我的错误。非常感谢!
  • 这是最佳实践,请继续坚持。顺便说一句,很高兴听到它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 2014-08-19
  • 1970-01-01
  • 2015-12-01
  • 2011-06-26
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多