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

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

图形界面用的还是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();
    }
}

运行的效果是这样的:

输入一下学号范围:

浅抽一下

再抽一下

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一支猫咔qly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值