【java】随机抽上课回答问题的小玩意

导读:本篇文章讲解 【java】随机抽上课回答问题的小玩意,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

以前高中的时候,记得听别人班的同学说,有一位物理老师为了解决上课提问没人举手回答问题的尴尬情况,当时自己弄出了一个随机点学号的程序来点同学回答问题,当时感觉很新奇哈哈哈,然后今天没啥事,我也复刻了一下当年的这段记忆。

图形界面用的还是JFrame。

然后用用两个JTextField来接收随机数的范围,按下抽奖按钮就可以随机抽同学的学号了。

下面是源代码:

mainUI类,主要功能实现:

package UI;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import function.function;

public class mainUI extends JFrame implements ActionListener{
   //成员变量
    JTextField min=new JTextField();
    JTextField max=new JTextField();
    JButton start=new JButton();
    int luck=0;
    JMenuItem aboutme=new JMenuItem("关于作者");


    //主界面的构造方法
    public mainUI(){
        jiemian();
        function();
        //将界面显示出来
        this.setVisible(true);

    }

    private void jiemian() {
        this.setSize(400,450);
        this.setAlwaysOnTop(true);
        this.setTitle("学生上课回答抽奖器");
        //让界面一直在所有窗口的上方
        this.setAlwaysOnTop(true);
        //选择关闭方式
        this.setDefaultCloseOperation(3);
        //让界面出现在中央
        this.setLocationRelativeTo(null);
        setLayout(null);
    }
    private void function(){
        //功能栏
        JMenuBar jb=new JMenuBar();


        JMenu about=new JMenu("关于");


        aboutme.addActionListener(this);

        jb.add(about);

        about.add(aboutme);
        this.setJMenuBar(jb);


        //输入框
        min.setBounds(150,170,150,30);
        this.getContentPane().add(min);

        max.setBounds(150,265,150,30);
        this.getContentPane().add(max);
        start.setText("开抽!");
        start.setBounds(150,320,80,40);
        this.getContentPane().add(start);
        start.addActionListener(this);


        //显示背景
        JLabel bg=new JLabel(new ImageIcon("image/bg.jpg"));
        bg.setBounds(0,0,400,450);
        this.getContentPane().add(bg);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object o=e.getSource();
        if (o==start){
            luck=function.Randomid(min.getText(),max.getText());
            System.out.println(luck);
            //按下按钮后显示抽到的同学
            JDialog Luck =new JDialog();
           Luck.setTitle("恭喜你啊!");
            JLabel j2=new JLabel();
            j2.setText("恭喜"+luck+"号同学,你被抽中了!");
            j2.setBounds(0,0,100,100);
            Luck.getContentPane().add(j2);
            Luck.setSize(200,100);
            Luck.setAlwaysOnTop(true);
            Luck.setLocationRelativeTo(null);
            //设置不关闭弹窗就无法进行下一步操作
            Luck.setModal(true);
            Luck.setVisible(true);
        }
        else if (o==aboutme){
//设置关于作者这个功能的弹窗
            JDialog jd=new JDialog();
            JLabel j2=new JLabel(new ImageIcon("image/me.jpg"));
            j2.setBounds(0,0,258,258);
            jd.getContentPane().add(j2);
            jd.setSize(344,344);
            jd.setAlwaysOnTop(true);
            jd.setLocationRelativeTo(null);
            //设置不关闭弹窗就无法进行下一步操作
            jd.setModal(true);
            jd.setVisible(true);
        }

    }
}

然后抽奖功能中,从JTextField中有一个getText()的方法,但是这个方法的返回类型是String,又因为我想的随机数是要随机出 int 整型的,怎么把这个String类型的数字转成相应的整型,我后面想了一小会,写了这个方法。

package function;

import java.util.Random;

public class function {
    //这个为抽奖机制的工具类
    private function(){};
    public static int Randomid(String min,String max){
        Random r=new Random();

        //将获得的字符串变成整型
        int Max=change(max);
        int Min=change(min);

        int n=r.nextInt(Max-Min+1)+Min;
        return n;
    }
    public static int change(String s) {
       //我写了这个方法能将int类型范围内的所有String表示的数字字符串转变为相应的int类型
        char[] arr = s.toCharArray();
        int n = 0;
        if (arr.length == 1) {
            n = (int) arr[0] - 48;
            return n;
        }
        else {
            double a=0;
            for (int i = 0; i < arr.length; i++) {
                int b=(int)arr[i]-48;
                a=a+b*Math.pow(10, arr.length-(i+1));
            }
            int c=(int)a;
            return c;

        }

    }
}

这样一来,只要是在 int 整型范围内的,例如:”12345″ (string)转成  12345(int),我都可以转换了,我感觉还是挺实用的,下面这一段:

public static int change(String s) {
        char[] arr = s.toCharArray();
        int n = 0;
        if (arr.length == 1) {
            n = (int) arr[0] - 48;
            return n;
        }
        else {
            double a=0;
            for (int i = 0; i < arr.length; i++) {
                int b=(int)arr[i]-48;
                a=a+b*Math.pow(10, arr.length-(i+1));
            }
            int c=(int)a;
            return c;

        }

    }

最后就是测试类了:

import UI.mainUI;
import function.function;

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
     new mainUI();
    }
}

运行的效果是这样的:

【java】随机抽上课回答问题的小玩意

输入一下学号范围:

【java】随机抽上课回答问题的小玩意

浅抽一下

【java】随机抽上课回答问题的小玩意

再抽一下

【java】随机抽上课回答问题的小玩意

感觉唯一有点用的,就是将String的数字转成int的那一段是有点用的,其他就当图一乐哈哈哈嘿嘿。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79494.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!