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和它本身以外,不能被其他正整数整除,就叫素数。
运用的知识:嵌套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(); } }
数组基本操作
运用的知识:增强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]
闰年:普通年能被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部分。