JavaSE进阶21天---第六天---Java基础案例(菜单小程序、1~100之间的素数之和、验证码生成、数组排序、2000 年到现在的闰年、猜数游戏、空心菱形)

​Java基础案例:菜单小程序、1~100之间的素数之和、验证码生成、数组排序、打印2000到现在年份闰年、猜数游戏、空心菱形。

活动地址:CSDN21天学习挑战赛

案例一(随机菜单制作)

随机菜单,可以自行选择菜单,也可以随机生成菜单。

运用的知识:StringUtils工具类、Scanner输入输出、if-else语句、switch语句、for循环、do-while循环、while循环、封装方法、静态调用方法。

package cn.moming;
//导入commons.lang3
import org.apache.commons.lang3.StringUtils;

import java.util.Random;
import java.util.Scanner;

public class Menu {
    public static void main(String[] args) {
        System.out.println(StringUtils.center("沫洺的今日菜单", 30,"-"));
        System.out.println("(温馨提示您可以自己选择菜单,也可以随机生成菜单)");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请选择菜单生成方式:");
        System.out.println("输入1为自己选择菜单");
        System.out.println("输入2为随机生成菜单");
        System.out.print("请输入:");
        int i = scanner.nextInt();
        if(i==1){
            boolean f = true;
            do {
                getMenu(scanner);
                System.out.println("继续选择输入:1,退出输入:2");
                int i1 = scanner.nextInt();
                if(i1==1){
                    getMenu(scanner);
                }else {
                    f=false;
                }
            } while (f);

        }else if(i==2){
            int f = 1;
            while (f==1){
                getRunMenu();
                System.out.println("继续随机选择输入:1,退出输入:2");
                int i1 = scanner.nextInt();
                if (i1==2){
                    f=2;
                }else {
                    f=1;
                }
            }
        }else {
            System.out.println("饿肚子吧你!!!");
        }
    }

    private static void getRunMenu() {
        //随机生成菜单
        Random random = new Random();
        int j1 = random.nextInt(1,6);
        System.out.print("今天的随机菜为:");
        getSwitch (j1);
    }

    //自选菜单列表
    private static void getMenu(Scanner scanner) {
        System.out.println(StringUtils.center("菜单", 15,"-"));
        System.out.println(StringUtils.center("1.西红柿炒鸡蛋", 15));
        System.out.println(StringUtils.center("2.香菇肉片", 15));
        System.out.println(StringUtils.center("3.红烧肉", 15));
        System.out.println(StringUtils.center("4.地三鲜", 15));
        System.out.println(StringUtils.center("5.水煮肉片", 15));
        System.out.println("请输入您要选择的菜的编号:");
        //自己选择菜单
        int j = scanner.nextInt();
        System.out.print("您选择了:");
        getSwitch(j);
    }
    //返回菜单
    private static void getSwitch(int j) {
        switch (j){
            case 1:
                System.out.println("西红柿炒鸡蛋");
                break;
            case 2:
                System.out.println("香菇肉片");
                break;
            case 3:
                System.out.println("红烧肉");
                break;
            case 4:
                System.out.println("地三鲜");
                break;
            case 5:
                System.out.println("水煮肉片");
                break;
            default:
                System.out.println("饿肚子吧你!!!");
                break;
        }
    }
}
-----------沫洺的今日菜单------------
(温馨提示您可以自己选择菜单,也可以随机生成菜单)
请选择菜单生成方式:
输入1为自己选择菜单
输入2为随机生成菜单
请输入:2
今天的随机菜为:西红柿炒鸡蛋
继续随机选择输入:1,退出输入:2
1
今天的随机菜为:香菇肉片
继续随机选择输入:1,退出输入:2
2
-----------沫洺的今日菜单------------
(温馨提示您可以自己选择菜单,也可以随机生成菜单)
请选择菜单生成方式:
输入1为自己选择菜单
输入2为随机生成菜单
请输入:1
------菜单-------
   1.西红柿炒鸡蛋    
    2.香菇肉片     
     3.红烧肉     
     4.地三鲜     
    5.水煮肉片     
请输入您要选择的菜的编号:
2
您选择了:香菇肉片
继续选择输入:1,退出输入:2
2

​案例二(1-100内素数之和)

素数:如果除了1和它本身以外,不能被其他正整数整除,就叫素数。

运用的知识:嵌套for循环,if判断、算数运算符、赋值运算符、比较运算符。

package moming;

public class PrimeNumber {
    public static void main(String[] args) {
        int sum = 2;
        for (int i = 2; i < 101; i++) {
            for (int j = 2; j < i; j++) {
                if(i%j==0)break;
                if(i-1==j) sum+=i;
            }
        }
        System.out.println("1-100内素数之和为:"+sum);
    }
}
1-100内素数之和为:1060

 案例三(开发验证码

验证码:一般就字母和数字的组合,常见的验证码就是4位。

所以简单理解就是在所以的字母和数字中随机抽取4个组成简单的验证码。

运用的知识:StringBuilder可变字符串方法、封装静态有参有返回值方法、静态调用方法、Random随机、for循环。

package cn.moming;

import java.util.Random;

public class VerificationCode {
    public static void main(String[] args) {
        //获得一个4位的字符串
        String s = getVerCode(4);
        System.out.println(s);
    }
    private static String getVerCode(int len) {
        //定义一个字符串
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
        StringBuilder sbu = new StringBuilder();
        Random random = new Random();
        //随机截取len个字母
        for (int i = 0; i < len; i++) {
            //随机获取一个索引位
            int pos = random.nextInt(0, str.length());
            //从获取的索引位置开始截取1个字符
            sbu.append(str.substring(pos,pos+1));
        }
        return sbu.toString();
    }
}
3e6c

 补充(验证码)

package cn.moming;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

public class VerificationCode {
    public static void main(String[] args){
        try {
            check();
        } catch (FontFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void check() throws FontFormatException, IOException {
        //创建画布
        int w = 100;
        int h = 50;
        BufferedImage img = new BufferedImage(w,h,2);
        //获取二维画笔
        Graphics2D g = img.createGraphics();
        //设置线条和文件的,抗锯齿(平滑)
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
        //添加画布颜色
        g.setColor(Color.WHITE);//白色
        g.fillRect(0, 0, w, h);
        //创建字体(导入字体)
        //加粗,字体大小35
        Font font = new Font("微软雅黑", Font.BOLD, 25);
        //获取字体
        g.setFont(font);
        //画字符串验证码(随机生成的字符串)
        //一个一个字符的写,且颜色随机
        String str1 = getRandStr();
        Random random = new Random();
        for (int i = 0; i < str1.length(); i++) {
            //获取随机色,随机透明度
            g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(200,256)));
            //设置字符坐标(随机坐标)
            int x = i*25+ random.nextInt(2,6);
            int y =random.nextInt(25,40);
            g.drawString(str1.substring(i, i+1), x, y);
        }
        //干扰字(个数)
        String str2 = getRandStr(random.nextInt(15,20));
        for (int i = 0; i < str2.length(); i++) {
            //获取随机色,随机透明度
            g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(50,100)));
            //设置字符坐标(随机坐标)
            int x = random.nextInt(w);
            int y = random.nextInt(h);
            //字号大小
            font = font.deriveFont(1.0f*random.nextInt(15, 19));
            //获取字体字号
            g.setFont(font);
            //画字符串
            g.drawString(str2.substring(i, i+1), x, y);
        }
        //随机个干扰线
        for (int i = 0; i < random.nextInt(10,15); i++) {
            //线坐标
            int x1 = random.nextInt(w);
            int y1 = random.nextInt(h);
            int x2 = random.nextInt(w);
            int y2 = random.nextInt(h);
            //随机粗细
            g.setStroke(new BasicStroke(random.nextInt(1,5)));
            //随机颜色
            g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(50,100)));
            //画线
            g.drawLine(x1,y1,x2,y2);
        }
        //释放画笔资源
        g.dispose();
        //保存图片,格式,位置名称
        ImageIO.write(img, "png", new File("check1.png"));
    }
    //随机获取4长度的字母
    public static String getRandStr(){
        return getRandStr(4);
    }
    //随机获取len长度的字母
    public static String getRandStr(int len){
        String letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
        StringBuilder sbu = new StringBuilder();
        Random random = new Random();
        //随机截取len个字母
        for (int i = 0; i < len; i++) {
            //随机获取一个字串
            //随机获取一个索引位
            int pos = random.nextInt(0, letter.length());
            //从获取的索引位置开始截取1个字符
            sbu.append(letter.substring(pos,pos+1));
        }
        return sbu.toString();
    }
}

JavaSE进阶21天---第六天---Java基础案例(菜单小程序、1~100之间的素数之和、验证码生成、数组排序、2000 年到现在的闰年、猜数游戏、空心菱形)_第1张图片

案例四(数组基本操作)

数组基本操作

运用的知识:增强for、Arrays工具类

package cn.moming;

import java.util.Arrays;

public class Arr {
    public static void main(String[] args) {
        //copy数组
        int[] arr = {1,2,3,4,5,6,7,8,9};
        System.out.println("原数组:"+Arrays.toString(arr));
        int[] newArr = new int[arr.length];
        int j = 0;
        for (int i : arr) {
            newArr[j]=i;
            j++;
        }
        System.out.println("copy的数组:"+Arrays.toString(newArr));
        System.out.println("=========================================================");
        //内置排序
        Integer[] n = {1, 10, 5, 2, 70, 9, 20, 35};
        System.out.println(Arrays.toString(n));
        //字符串长度
        System.out.println("数组长度:"+n.length);
        System.out.println("字符串长度:"+Arrays.toString(n).length());
        //默认是升序
        Arrays.sort(n);
        System.out.println("升序后:" + Arrays.toString(n));

        //升序
        Arrays.sort(n, (a, b) -> a - b);
        System.out.println("升序后:" + Arrays.toString(n));

        //降序Arrays.sort(n,(a,b)->b-a)
        Arrays.sort(n, (a, b) -> b - a);
        System.out.println("降序后:" + Arrays.toString(n));

        //乱序
        Arrays.sort(n, (x, y) -> Math.random() > .5 ? 1 : -1);
        System.out.println("乱序后:" + Arrays.toString(n));

        //分隔符
        System.out.println("=========================================================");


        //字符串数组
        String[] langs = {"java", "javascript", "c", "go", "python", "c++", "c#"};
        System.out.println(Arrays.toString(langs));
        //字符串长度
        System.out.println("字符串长度:"+Arrays.toString(langs).length());
        //按字母顺序
        //升序
        Arrays.sort(langs);
        System.out.println("升序后:"+Arrays.toString(langs));
        //降序
        Arrays.sort(langs, (a, b) -> b.compareTo(a));
        System.out.println("降序后:"+Arrays.toString(langs));
        //乱序
        Arrays.sort(langs, (a, b) -> Math.random() > .5 ? 1 : -1);
        System.out.println("乱序后:"+Arrays.toString(langs));
        //按长度排序
        //升序
        Arrays.sort(langs,(a,b)->a.length()-b.length());
        System.out.println("按长度升序后:"+Arrays.toString(langs));
        //降序
        Arrays.sort(langs,(a,b)->b.length()-a.length());
        System.out.println("按长度降序后:"+Arrays.toString(langs));
    }
}
原数组:[1, 2, 3, 4, 5, 6, 7, 8, 9]
copy的数组:[1, 2, 3, 4, 5, 6, 7, 8, 9]
=========================================================
[1, 10, 5, 2, 70, 9, 20, 35]
数组长度:8
字符串长度:28
升序后:[1, 2, 5, 9, 10, 20, 35, 70]
升序后:[1, 2, 5, 9, 10, 20, 35, 70]
降序后:[70, 35, 20, 10, 9, 5, 2, 1]
乱序后:[1, 70, 2, 35, 5, 20, 10, 9]
=========================================================
[java, javascript, c, go, python, c++, c#]
字符串长度:42
升序后:[c, c#, c++, go, java, javascript, python]
降序后:[python, javascript, java, go, c++, c#, c]
乱序后:[java, go, c#, javascript, c++, python, c]
按长度升序后:[c, go, c#, c++, java, python, javascript]
按长度降序后:[javascript, python, java, c++, go, c#, c]

案例五(打印2000年到现在时间内的所有闰年)

闰年:普通年能被4整除且不能被100整除的为闰年或者世纪年能被400整除的是闰年。

运用的知识:Date工具类

package moming;

import java.util.Date;

public class Leap {
    public static void main(String[] args) {
        Date date = new Date();
        for (int year=date.getYear()+1900;year>=2000;year--) {
            if (year%400==0||(year%4==0&&year%100!=0)) {
                System.out.printf("%d年是闰年%n",year);
            }else System.out.printf("%d年不是闰年%n",year);
        }
    }
}
2022年不是闰年
2021年不是闰年
2020年是闰年
2019年不是闰年
2018年不是闰年
2017年不是闰年
2016年是闰年
2015年不是闰年
2014年不是闰年
2013年不是闰年
2012年是闰年
2011年不是闰年
2010年不是闰年
2009年不是闰年
2008年是闰年
2007年不是闰年
2006年不是闰年
2005年不是闰年
2004年是闰年
2003年不是闰年
2002年不是闰年
2001年不是闰年
2000年是闰年

案例六(猜数游戏) 

猜数:1到100之间随机指定一个数,玩家在此范围进行猜数

运用的知识:Random类、Scanner类、while循环、if-else语句、break、continue。

package moming;

import java.util.Random;
import java.util.Scanner;

public class GuessNum {
    public static void main(String[] args) {
        Random random = new Random();
        int num = random.nextInt(1, 101);
        //5System.out.println(num);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入1~100之间的数");
        int num2 = 1;
        int num3 = 100;
        while (true) {
            int num1 = 0;
            if(scanner.hasNextInt()){
                //如果有就给t写入
                num1 = scanner.nextInt();
            }else {
                //没有就再次调用sc.nextLine();进行键盘录入
                scanner.nextLine();
                System.out.println("输入的不是数字");
                continue;
            }
            if (num1 >= num2 && num1 <= num3) {
                if (num1 > num) {
                    System.out.printf("大了! 请输入%d~%d之间的数%n", num2, num1);
                    num3 = num1;
                } else if (num1 < num) {
                    System.out.printf("小了!请输入%d~%d之间的数%n", num1, num3);
                    num2 = num1;
                } else {
                    System.out.printf("就是%d!终于猜中了,等你好久了!%n", num1);
                    break;
                }
            } else {
                System.out.printf("输入的数不在%d~%d之间请重新输入%n", num2, num3);
            }
        }

    }
}
请输入1~100之间的数
6
小了!请输入6~100之间的数
80
大了! 请输入6~80之间的数
55
大了! 请输入6~55之间的数
25
大了! 请输入6~25之间的数
15
小了!请输入15~25之间的数
19
小了!请输入19~25之间的数
22
大了! 请输入19~22之间的数
20
就是20!终于猜中了,等你好久了!

 案例七(空心菱形)

菱形

运用的知识:嵌套for循环、逻辑运算符、if判断。

package moming;

public class HollowRhombus {
    public static void main(String[] args) {
        int l = 11;
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < l; j++) {
                System.out.print(" ");
            }
            l-=2;
            for (int j = 0; j <= i*4+1; j++) {
                if(j==1||j==i*4+1)System.out.print("*");
                else System.out.print(" ");
            }
            System.out.println();
        }
        l=3;
        for (int i = 5; i > 0; i--) {
            for (int j = 0; j < l; j++) {
                System.out.print(" ");
            }
            l+=2;
            for (int j = 0; j <= (i-1)*4+1; j++) {
                if(j==1||j==(i-1)*4+1)System.out.print("*");
                else System.out.print(" ");
            }
            System.out.println();
        }
    }
}
            *
          *   *
        *       *
      *           *
    *               *
  *                   *
    *               *
      *           *
        *       *
          *   *
            *

 总结:以上案例基本上使用的都是Java基础知识,有个别的比如菜单制作中的标题用到了StringUtils组件,导入jar包,如何导入参考:Java语言编写菱形,四行代码实现_沫洺的博客-CSDN博客

Java基础其实还有很多有意思的编程案例,想要提高对Java基础知识的掌握,就多练习,多积累,其实在练习的过程中,会延申出很多知识体系,帮助你去学习后面的JavaSE部分。 

你可能感兴趣的:(Java基础,java)