packagecom.shifan.base.string;/**
* 字符串比较
*/publicclassTestString{publicstaticvoidmain(String[] args){String t =newString("hello");char c[]={'h','e','l','l','o'};//helloSystem.out.println(c);//falseSystem.out.println(t.equals(c));}}
8.生成验证码
packagecom.shifan.base.exercises;importjava.util.Random;/**
* 在登录注册页面中,除了用户名和密码外,通常也会包含验证码。
* 验证码是用来区分用户是计算机还是人,防止恶意破解密码、刷票、灌水等行为。
* 请查看Random、StringBuilder相关API,
* 定义方法,获取一个包含4个字符的验证码,每一位字符是随机选择的字母和数字,
* 可包含a-z,A-Z,0-9。例如:
*/publicclassExercise01{publicstaticvoidmain(String[] args){String s =getVerifyCode();System.out.println(s);}privatestaticStringgetVerifyCode(){StringBuilder sb =newStringBuilder();Random r =newRandom();String str ="";addChar(sb);for(int i =0; i <4; i++){char c = sb.charAt(r.nextInt(sb.length()));
str += c;}return str;}privatestaticvoidaddChar(StringBuilder sb){for(char i ='A'; i <='Z'; i++){
sb.append(i);}for(char i ='a'; i <='z'; i++){
sb.append(i);}for(char i ='0'; i <='9'; i++){
sb.append(i);}}}
9.判断身份证号码合法性
packagecom.shifan.base.exercises;importjava.util.Scanner;/**
* 我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。
* 请定义方法判断用户输入的身份证号码是否合法,
* 并在主方法中调用方法测试结果。
* 规则为:号码为18位,不能以数字0开头,前17位只可以是数字,
* 最后一位可以是数字或者大写字母X。
* 注意:startsWith方法的形参类型为字符串
*/publicclassExercise02{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);System.out.println("请输入身份证号:");String s = sc.nextLine();boolean b =judgeLegitimacy(s);if(b){System.out.println("合法");}else{System.out.println("不合法");}}privatestaticbooleanjudgeLegitimacy(String s){boolean a =true;//判断长度是否为18位if(s.length()!=18){
a =false;}//判断是否以数字0开头,调用starsWith方法if(s.startsWith("0")){
a =false;}for(int i =0; i < s.length(); i++){if(i == s.length()-1){//判断最后一位是否为数字或大写Xif(s.charAt(i)<'0'||s.charAt(i)>'9'&&s.charAt(i)!='X'){
a =false;}}else{//判断中间16位是否为数字if(s.charAt(i)<'0'||s.charAt(i)>'9'){
a =false;}}}return a;}}
10.统计字符串
packagecom.shifan.base.exercises;/**
* int indexOf(String str) :查找参数字符串str在调用方法的字符串中第一次出现的索引,如果不存在,返回-1
* String substring(int beginIndex):截取字符串,从索引beginIndex(包含)开始到字符串的结尾
* 现有如下文本:"Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"。
* 请编写程序,统计该文本中"Java"一词出现的次数。
*/publicclassExercise03{publicstaticvoidmain(String[] args){String s ="Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";System.out.println(s);int count =0;while(true){int index = s.indexOf("Java");if(index!=-1){
count++;
s = s.substring(index+1);}else{break;}}System.out.println("Java出现次数为:"+count);}}
11.图书管理系统
packagecom.shifan.base.exercises;importcom.shifan.domain.Book;importjava.util.ArrayList;importjava.util.Scanner;/**
* 利用面向对象的思想设计一个图书管理系统。
* 图书的属性有:编号,书名,作者,价格。要求提供如下功能:
* 1、提供操作菜单,可以选择要进行的操作。
* 2、可以添加图书,添加图书时,编号需要唯一,添加成功,返回到菜单。
* 3、可以查询图书,显示所有图书信息,然后返回到菜单。
* 4、可以根据书名,查询单本图书信息,显示信息后,返回到菜单。
* 5、可以删除图书,通过编号删除,删除成功后,返回到菜单。
* 6、可以修改图书的信息,但编号不可以修改,修改成功后,返回到菜单。
* 7、可以退出系统,结束程序运行。
* 提示:
* 1、所有图书信息由键盘录入
* 2、图书的价格可以定义为字符串类型,
* 因为在键盘录入时,不可以先使用nextInt()方法获取整数然后再使用nextLine()方法获取字符串,这样会导致nextLine()方法获取不到数据。
* @author shifan
*/publicclassExercise04{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);ArrayList<Book> books =newArrayList<>();
lo:while(true){System.out.println("==========图书管理系统==========");System.out.println("1.添加图书");System.out.println("2.查看所有图书");System.out.println("3.查询书籍");System.out.println("4.删除图书");System.out.println("5.修改图书信息");System.out.println("6.退出系统");System.out.println("请输入数字选择功能:");int i = sc.nextInt();switch(i){case1:addBook(books);break;case2:showBook(books);break;case3:searchBook(books);break;case4:deleteBook(books);break;case5:modifyBook(books);break;case6:System.out.println("感谢您的使用");break lo;default:System.out.println("输入错误,请输入数字1-6!");break;}}}privatestaticvoidmodifyBook(ArrayList<Book> books){Scanner sc =newScanner(System.in);System.out.println("请输入编号:");String bookNum = sc.nextLine();int i =searchBookNum(books, bookNum);if(i !=-1){System.out.println("请输入新书名:");String newBookName = sc.nextLine();if("".equals(newBookName)){System.out.println("书名不能为空");return;}System.out.println("请输入新作者:");String newBookAuthor = sc.nextLine();System.out.println("请输入新价格:");double newBookPrice = sc.nextDouble();Book book = books.get(i);
book.setName(newBookName);
book.setAuthor(newBookAuthor);
book.setPrice(newBookPrice);System.out.println("修改成功");}else{System.out.println("没有这本书");}}privatestaticvoiddeleteBook(ArrayList<Book> books){Scanner sc =newScanner(System.in);System.out.println("请输入编号:");String bookNum = sc.nextLine();if(searchBookNum(books,bookNum)!=-1){
books.remove(searchBookNum(books,bookNum));System.out.println("删除成功");}else{System.out.println("不存在这本书");}}privatestaticvoidsearchBook(ArrayList<Book> books){Scanner sc =newScanner(System.in);System.out.println("请输入书名:");String bookName = sc.nextLine();boolean a =true;for(Book book : books){if(bookName.equals(book.getName())){
book.show();
a =false;}}if(a){System.out.println("未找到这本书");}}privatestaticvoidshowBook(ArrayList<Book> books){if(books.size()==0){System.out.println("没有书籍,请添加后重试");}else{System.out.println("编号"+"\t"+"书名"+"\t"+"作者"+"\t"+"价格");for(Book book : books){System.out.print(book.getNum()+"\t");System.out.print(book.getName()+"\t");System.out.print(book.getAuthor()+"\t");System.out.print(book.getPrice()+"\n");}}}privatestaticvoidaddBook(ArrayList<Book> books){Scanner sc =newScanner(System.in);System.out.println("请输入编号:");String num = sc.nextLine();if("".equals(num)){System.out.println("编号不能为空");return;}if(searchBookNum(books,num)!=-1){System.out.println("编号已存在");return;}System.out.println("请输入书名");String name = sc.nextLine();if("".equals(name)){System.out.println("书名不能为空");return;}System.out.println("请输入作者");String author = sc.nextLine();System.out.println("请输入价格");Double price = sc.nextDouble();Book book =newBook(num, name, author, price);
books.add(book);System.out.println("添加成功");}privatestaticintsearchBookNum(ArrayList<Book> books,String s){int a =-1;for(int i =0;i < books.size();i++){if(s.equals(books.get(i).getNum())){
a = i;break;}}return a;}}
packagecom.shifan.base.exercises;importjava.util.Arrays;importjava.util.Random;importjava.util.Scanner;/**
* 1. 定义一个方法实现获取一个int数组:
* 键盘录入数组的长度和随机数的范围(范围区间要大于数组长度),
* 在数组中存储指定范围的随机数,并且随机数不能重复
* 2. 定义一个方法实现查找索引:键盘录入一个数,
* 在指定的数组中获取该数在数组中的索引,如果没有则返回-1。
* 有,有几个索引返回几个索引
* @author shifan
*/publicclassExercise09{publicstaticvoidmain(String[] args){int[] arr =getArray();System.out.println(Arrays.toString(arr));Scanner sc =newScanner(System.in);System.out.println("请输入一个整数:");int i = sc.nextInt();int[] index =searchNum(i,arr);if(index.length!=0){System.out.println("这个数的索引有:");System.out.println(Arrays.toString(index));}else{System.out.println("没有这个数");}}/**
* 键盘录入一个数,
* 在指定的数组中获取该数在数组中的索引,如果没有则返回-1。
* 有,有几个索引返回几个索引
* @param num 键盘录入的数
* @param arr 被查找的数组
* @return 返回索引数组
*/privatestaticint[]searchNum(int num,int[] arr){int index =-1,j =0;int[] ints =newint[arr.length];for(int i =0; i < ints.length; i++){
ints[i]= index;}for(int i =0; i < arr.length; i++){if(arr[i]== num){
ints[j]= i;
j++;}}int[] arr1 =newint[j];for(int i =0,k =0; i < ints.length; i++){if(ints[i]!=-1){
arr1[k]= ints[i];
k++;}}return arr1;}/**
* 键盘录入数组的长度和随机数的范围(范围区间要大于数组长度),
* 在数组中存储指定范围的随机数,并且随机数不能重复
* @return 返回生成的随机数组
*/privatestaticint[]getArray(){Random r =newRandom();System.out.println("请输入数组长度:");Scanner sc =newScanner(System.in);int len = sc.nextInt();int[] arr =newint[len];int bound1,bound2;while(true){System.out.println("请输入数组元素范围下限:");
bound1 = sc.nextInt();System.out.println("请输入数组元素范围上限:");
bound2 = sc.nextInt();if((bound2-bound1)< len){System.out.println("该范围要大于数组长度");}else{break;}}for(int i =0; i < arr.length; i++){
arr[i]= r.nextInt((bound2-bound1)+1)+bound1;//去重for(int j = i-1; j >=0; j--){if(arr[j]== arr[i]){
i--;}}}return arr;}}
17.生成一组随机数打印最小值
packagecom.shifan.base.exercises;importjava.util.Arrays;importjava.util.Random;/**
* 随机生成10个15~85的随机数(包括15和85),打印这些随机数和其中的最小值
*/publicclassExercise10{publicstaticvoidmain(String[] args){Random r =newRandom();int[] arr =newint[10];for(int i =0; i < arr.length; i++){
arr[i]= r.nextInt(71)+15;}int min = arr[0];for(int i =0; i < arr.length; i++){if(arr[i]<min){
min = arr[i];}}System.out.println(Arrays.toString(arr));System.out.println(min);}}
知识点
1.nextLine方法不能和nextInt方法一起使用
packagecom.shifan.base.scanner;importjava.util.Scanner;/**当nextLine方法与nextInt方法配合使用的时候
因为nextInt方法以Enter键结束
nextLine方法遇到Enter停止接收
推荐使用next方法与nextInt方法配合使用*/publicclassDemo05Scanner{publicstaticvoidmain(String[] args){Scanner s =newScanner(System.in);System.out.println("请输入数字");int i = s.nextInt();System.out.println("请输入字符串");String s1 = s.nextLine();System.out.println(i);System.out.println(s1);}}
2.常量的定义
packagecom.shifan.base.data;/**
* 常量的定义
* 在Java语言中,用关键字final来定义一个常量。常量一旦被初始化后不能再更改。
* 声明格式: final type varName =value;
* 常量的命名:全用大写字母,单词之间下滑线隔开
* 为了更好的区分和表述,一般将1、23'a'b’truefalse "helloWorld等称为字符常量,而使用final修饰的PI等称为符号常量。
*/publicclassConstant{// 静态常量publicstaticfinaldouble PI =3.14;// 声明成员常量finalint y =10;publicstaticvoidmain(String[] args){// 声明局部常量finaldouble x =3.3;}}