【案例5-1】 模拟订单号生成
【案例介绍】
1.任务描述
在超市购物时,小票上都会有一个订单号,而且每个订单号都是唯一的。本例要求编写一个程序,模拟订单系统中订单号的生成。在生成订单号时,使用年月日和毫秒值组合生成唯一订单号。例如,给定一个包括年月日以及毫秒值的数组arr={2020,0504,1101},将其拼接成字符串s:[202005041101],作为一个订单号。
2.运行结果
运行结果→
s:[20193241101]
【案例任务】
- 学会分析“模拟订单号生成”任务的实现思路。
- 根据思路独立完成“模拟订单号生成”任务的源代码编写、编译及运行。
- 掌握String类中常用方法的使用。
- 掌握之前学习的for循环、方法调用等知识。
【案例思路】
(1)分析任务描述可知,做此任务需要先定义一个数组,数组中包括年月日以及毫秒值。
(2)要实现数组转成一个字符串,首先定义一个方法实现数组拼接成字符串。参数类型为数组,返回值类型为String,可先使用String定义一个空串,然后使用字符串的操作方法在开始最后加上“[]”字符。之后在加“[]”字符中间循环遍历数组用开始定义的字符串接收。自此,我们拼接的方法完成。在方法中将数组遍历,然后把每一个得到的字符拼接成一个字符串并且返回。
(3) 在主函数入口调用刚才的方法。并定义一个字符串变量接收结果
(4) 输出结果,观察控制台的效果。
【案例实现】
模拟订单号生成系统的实现代码,如文件5-1所示。
文件5-1 example1.java
-
package com.itheima; public class example1 { public static void main(String[] args) { // 订单的年份月份毫秒值,定义一个数组即可 int[] arr = {2019,0504,1101}; //调用方法,用一个变量接受结果 String s = arrayToString(arr); //输出结果 System.out.println("s:" + s); } // 定义一个方法实现数组拼接成字符串。参数类型为数组 返回值类型为String public static String arrayToString(int[] arr) { String s = ""; s += "["; for (int i = 0; i < arr.length; i++) { if(i == arr.length-1) { s+=arr[i]; }else { s+= arr[i]; } } s += "]"; //在方法中将数组遍历,然后把每一个得到的字符拼接成一个字符串并且返回 return s; } }
在文件5-1中,第6行定义了一个数组arr,数组中有年月日以及毫秒值。第7行代码调用了arrayToString()方法,该方法封装将数组遍历拼接成字符串并返回的核心功能。第13行用String的初始化代码定义了一个空串,用于接收拼接成的字符串并且返回拼接成的字符串。第15~22行代码用于遍历数组arr,每循环一次将数组中元素赋值给空串s,for循环中定义了一个i变量,用于记录循环的次数。当i的值不小于数组元素长度是循环结束。数组也全部遍历完并全部赋值给空串s。第24行用于返回拼接后的字符串。
【案例5-2】 模拟默认密码自动生成
【案例介绍】
1.任务描述
本例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。
2.运行结果
运行结果→
请您输入用户名:
Yuns
恭喜Yuns用户注册成功,您的初始密码为:snuY
【案例任务】
- 学会分析“模拟默认密码的生成”任务的实现思路。
- 根据思路独立完成“模拟默认密码的生成”任务的源代码编写、编译及运行。
- 掌握String类及Scanner类中常用方法的使用。
- 掌握之前学习的for循环、方法调用等知识。
【案例思路】
(1) 分析任务描述可知,做此任务首先需要用Scanner类相关方法实现键盘手动输入一个字符串代表用户名。
(2) 要实现默认密码自动生成,根据任务描述可知默认密码就是手动输入用户名的反转及字符串的反转。因此需要将字符串用循环倒着遍历,用charAt()方法接收遍历的字符并赋值给空串。
(3) 在主函数入口调用刚才的方法。并定义一个字符串变量接收结果
(4) 输出结果,观察控制台的效果。
【案例实现】
模拟默认密码生成策略的实现代码,如文件5-2所示。
文件5-2 example2.java
-
package com.itheima; import java.util.Scanner; public class example2 { public static void main(String[] args) { //键盘输入一个字符串,用Scanner实现 Scanner sc = new Scanner(System.in); System.out.println("请您输入用户名:"); String line = sc.nextLine(); //调用方法,用一个变量接收 String reverse = reverse(line); //输出结果 System.out.println("恭喜"+line+"用户注册成功,您的初始密码为:"+reverse); } //定义一个方法实现字符串反转 public static String reverse(String s) { String ss = ""; //在方法中将字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并且返回 for (int i = s.length()-1; i >=0; i--) { ss+=s.charAt(i); } return ss; } }
在文件5-2中, 第6~8行用Scanner实现了一个从键盘输入字符串,第10行代码调用了reverse()方法,该方法实现了循环遍历字符串中的字符。并且是倒叙遍历的。然后用charAt()方法将单个字符依次返回。最后将倒过来的字符串返回。第12行代码用System类实现将结果输出到打印控制台。
【案例5-3】 模拟用户登录
【案例介绍】
1.任务描述
在使用一些APP时,通常都需要填写用户名和密码。用户名和密码输入都正确才会登录成功,否则会提示用户名或密码错误。
本例要求编写一个程序,模拟用户登录。程序要求如下:
- 用户名和密码正确,提示登录成功。
- 用户名或密码不正确,提示“用户名或密码错误”。
- 总共有3次登录机会,在3次内(包含三次)输入正确的用户名和密码后给出登录成功的相应提示。超过3次用户名或密码输入有误,则提示登录失败,无法再继续登录。。
在登录时,需要比较用户输入的用户名密码与已知的用户名密码是否相同,本案例可以使用Scanner类以及String类的相关方法实现比较操作。
2.运行结果
登录成功的运行结果→
请输入用户名:
itheima
请输入用户密码:
czbk
登录成功!
登录失败的运行结果→
请输入用户名:
itheima
请输入用户密码:
cabk
登录失败,还有2次机会
请输入用户名:
【案例任务】
- 学会分析“模拟用户登录”任务的实现思路。
- 根据思路独立完成“模拟用户登录”任务的源代码编写、编译及运行。
- 掌握String类及Scanner类中常用方法的使用。
- 掌握之前学习的if判断知识。
【案例思路】
(1) 分析任务描述可知,已知用户名密码,定义两个字符串表示即可。
(2) 键盘录入要登录的用户名密码。用Scanner实现。
(3) 拿键盘录入的用户名密码和已知的用户名密码进行比较,给出相应的提示,字符串内容比较用equles实现。
(4) 循环实现多次机会。这里次数明确,用for循环实现。并在登录成功的时候。用break结束循环。
【案例实现】
模拟用户登录的实现代码,如文件5-3所示。
文件5-3 example3.java
-
package com.itheima; import java.util.Scanner; public class example3 { public static void main(String[] args) { //已知用户名密码,定义两个字符串表示即可。 String username = "itheima"; String password = "czbk"; for (int i = 0; i < 3; i++) { // 键盘录入要登录的用户名密码。用Scanner实现 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String uname = sc.nextLine(); System.out.println("请输入用户密码:"); String pwd = sc.nextLine(); //拿键盘录入的用户名密码和已知的用户名密码进行比较,给出相应的提示,字符串内容比较用equles实现。 if(uname.equals(username)&&pwd.equals(password)) { System.out.println("登录成功!"); break; }else { if(2-i == 0) { System.out.println("你的账户被锁定了,请联系管理员!!"); }else { //2,1,0 System.out.println("登录失败,还有"+(2-i)+"次机会"); } } } } }
在文件5-3中,第6行和第7行分别定义字符串表示已知的用户名与用户密码,第8行代码用for循环来控制用户名与密码输入错误的次数,第10~14行代码用Scanner类中的方法实现键盘录入用户名密码。第17~26行代码表示拿键盘输入的用户名与用户密码与已知的用户名与用户密码进行比较。其中比较字符串内容用equals()方法,如果内容相同,则用break跳出for循环。如果内容不相同,则提示登录失败以及还有几次机会。