【问题标题】:How I can make my program generate a new random number?如何让我的程序生成一个新的随机数?
【发布时间】:2020-10-29 01:02:41
【问题描述】:

所以我尝试关闭窗口并在之后重新打开它,以便整个程序从头开始。那没有用。重新验证框架(f.revalidate(),f.repaint())也没有。 我试过用while循环循环if函数,当数字被猜到时将布尔值设置为false。但这只会导致测试数字是否正确的无限循环,因为在单击按钮时会激活循环。

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;
        //static boolean w = true;
        //static boolean s = true;
        static int wert;
       // static int Zahl1;
        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 -> {//statt evt könnte man natürlich auch actionPerformed... nehmen. 

                i++;
                
               /* while(w) {*/
                    
                
               /* while(s) {*///Problem: wert wird endlos getestet, Möglichkeit: Fehler bei Eingabe von String trien und catchen aber wie ??
                    String str = t.getText();
                    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 ist größer.");
                }
                if(wert == Zahl) {
                    System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
                    int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie eine neue Runde starten?", "Frage", JOptionPane.YES_NO_OPTION);
                    if (dialogResult == 0) {
                        
                    }else {
                        //w = false;
                        System.exit(0);
                    }
                    //s = false;
                }
                
               // }
                  
                 
          //  }
           });
            
            
            
            
            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);
            
        }
    }

提前致谢!

【问题讨论】:

    标签: java loops swing random jframe


    【解决方案1】:

    一旦用户找到正确的数字,如果用户希望继续,您只需为您的随机数 (Zahl) 设置一个新值:

    if (dialogResult == 0) {
       Zahl.set(r.nextInt(100 - 0 + 1));
    }
    

    请注意,它位于 lambda 函数中,因此可以选择将 int 变量切换为 AtomicInteger。这样你就可以更新了。

    import java.util.concurrent.atomic.AtomicInteger;
    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;
            //static boolean w = true;
            //static boolean s = true;
            static int wert;
           // static int Zahl1;
            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();
                AtomicInteger Zahl = new AtomicInteger(r.nextInt(100 - 0 + 1));
                
                JButton b = new JButton("Prüfen");
                f.getRootPane().setDefaultButton(b);//Enter Key = button b
                b.addActionListener(evt -> {//statt evt könnte man natürlich auch actionPerformed... nehmen. 
    
                    i++;
                    
                   /* while(w) {*/
                        
                    
                   /* while(s) {*///Problem: wert wird endlos getestet, Möglichkeit: Fehler bei Eingabe von String trien und catchen aber wie ??
                        String str = t.getText();
                        wert = Integer.parseInt(str);
                        t.setText("");
                    
                    if(wert > Zahl.get()) {
                        System.out.println("Der gesuchte Wert ist kleiner.");
                    }
                    if(wert < Zahl.get()) {
                        System.out.println("Der gesuchte Wert ist größer.");
                    }
                    if(wert == Zahl.get()) {
                        System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
                        int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie eine neue Runde starten?", "Frage", JOptionPane.YES_NO_OPTION);
                        if (dialogResult == 0) {
                          Zahl.set(r.nextInt(100 - 0 + 1));
                        }else {
                            //w = false;
                            System.exit(0);
                        }
                        //s = false;
                    }
                    
                   // }
                      
                     
              //  }
               });
                
                
                
                
                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);
                
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多