一、生成假数据------网络爬取
1.1 获取姓氏
先根据网址爬取所有数据
java
package com.IOproject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Test01 {
public static void main(String[] args) throws IOException {
//1.定义变量记录网址
String familyNameNet="https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";
String boyNameNet="http://www.haoming8.cn/baobao/10881.html";
String girlNameNet="http://www.haoming8.cn/baobao/7641.html";
//2.爬取数据,把网址上所有的数据拼接成一个字符串
String s = webCrawler(familyNameNet);
System.out.println(s);
}
//作用:从网络中爬取数据,把数据拼接成字符串返回
//参数:网址 返回值:爬取到的所有数据
public static String webCrawler(String net) throws IOException {
//1.定义一个stringbuilder对象来拼接爬取到的数据
StringBuilder sb=new StringBuilder();
//2.创建一个URL对象
URL url=new URL(net);
//3.链接上这个网址
//细节:保证网络是通畅的,而且这个网址是可以链接上的
URLConnection conn = url.openConnection();
//conn.getInputStream()是一个字节输入流,但是网址含有中文,所以用字节流更方便,于是想到了转换流
InputStreamReader isr=new InputStreamReader(conn.getInputStream());//isr是字符流输入
//4.读取数据
int b;
while ((b=isr.read())!=-1){
sb.append((char)b);
}
//5.释放资源
isr.close();
//6.把读取到的数据返回。
return sb.toString();
}
}
输出结果
是一个前端代码:因为在对面的服务器中存储的就是这样一个前端代码,而我们平时在浏览器中看到的界面是浏览器已经翻译好的。所以这次爬取已经跳过了浏览器,得到的就是一个前端代码。


完整的获取姓氏的代码
java
package com.IOproject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test01 {
public static void main(String[] args) throws IOException {
//1.定义变量记录网址
String familyNameNet="https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";
String boyNameNet="http://www.haoming8.cn/baobao/10881.html";
String girlNameNet="http://www.haoming8.cn/baobao/7641.html";
//2.爬取数据,把网址上所有的数据拼接成一个字符串
String familystr = webCrawler(familyNameNet);
String boystr = webCrawler(familyNameNet);
String girlstr = webCrawler(familyNameNet);
//3.通过正则表达式,把其中符合要求的数据获取出来
ArrayList<String> familyNameList=getData(familystr,"(.{4})(,|。)",1);
System.out.println(familyNameList);
}
//作用:从网络中爬取数据,把数据拼接成字符串返回
//参数:网址 返回值:爬取到的所有数据
public static String webCrawler(String net) throws IOException {
//1.定义一个stringbuilder对象来拼接爬取到的数据
StringBuilder sb=new StringBuilder();
//2.创建一个URL对象
URL url=new URL(net);
//3.链接上这个网址
//细节:保证网络是通畅的,而且这个网址是可以链接上的
URLConnection conn = url.openConnection();
//conn.getInputStream()是一个字节输入流,但是网址含有中文,所以用字节流更方便,于是想到了转换流
InputStreamReader isr=new InputStreamReader(conn.getInputStream());//isr是字符流输入
//4.读取数据
int b;
while ((b=isr.read())!=-1){
sb.append((char)b);
}
//5.释放资源
isr.close();
//6.把读取到的数据返回。
return sb.toString();
}
//作用:根据正则表达式获取字符串中的数据
//参数一:完整的字符串 参数二:正则表达式 参数三:???
public static ArrayList<String> getData(String str,String regex,int index){
//1.创建集合存放数据
ArrayList<String> list=new ArrayList<>();
//2.按照正则表达式的规则,去获取数据
Pattern pattern=Pattern.compile(regex);
//按照pattern的规则,到str中获取数据
Matcher matcher=pattern.matcher(str);
while (matcher.find()){
if(!matcher.group().startsWith("em")){//因为网址更新打印出来有很多em">也匹配到了,所以多加了一个判断
list.add(matcher.group(index)); //group()里面的整数参数:当正则表达式有几组,一个括号为一组,参数为0就是所有组都获取
//参数为1就是只获取第一组,以此类推......
}
}
return list;
}
}
输出结果:
java
[赵钱孙李, 周吴郑王, 冯陈褚卫, 蒋沈韩杨, 朱秦尤许, 何吕施张, 孔曹严华, 金魏陶姜, 戚谢邹喻, 柏水窦章, 云苏潘葛, 奚范彭郎, 鲁韦昌马, 苗凤花方, 俞任袁柳, 酆鲍史唐, 费廉岑薛, 雷贺倪汤, 滕殷罗毕, 郝邬安常, 乐于时傅, 皮卞齐康, 伍余元卜, 顾孟平黄, 和穆萧尹, 姚邵湛汪, 祁毛禹狄, 米贝明臧, 计伏成戴, 谈宋茅庞, 熊纪舒屈, 项祝董梁, 杜阮蓝闵, 席季麻强, 贾路娄危, 江童颜郭, 梅盛林刁, 钟徐邱骆, 高夏蔡田, 樊胡凌霍, 虞万支柯, 昝管卢莫, 经房裘缪, 干解应宗, 丁宣贲邓, 郁单杭洪, 包诸左石, 崔吉钮龚, 程嵇邢滑, 裴陆荣翁, 荀羊於惠, 甄曲家封, 芮羿储靳, 汲邴糜松, 井段富巫, 乌焦巴弓, 牧隗山谷, 车侯宓蓬, 全郗班仰, 秋仲伊宫, 宁仇栾暴, 甘钭厉戎, 祖武符刘, 景詹束龙, 叶幸司韶, 郜黎蓟薄, 印宿白怀, 蒲邰从鄂, 索咸籍赖, 卓蔺屠蒙, 池乔阴鬱, 胥能苍双, 闻莘党翟, 谭贡劳逄, 姬申扶堵, 冉宰郦雍, 郤璩桑桂, 濮牛寿通, 边扈燕冀, 郏浦尚农, 温别庄晏, 柴瞿阎充, 慕连茹习, 宦艾鱼容, 向古易慎, 戈廖庾终, 暨居衡步, 都耿满弘, 匡国文寇, 广禄阙东, 欧殳沃利, 蔚越夔隆, 师巩厍聂, 晁勾敖融, 冷訾辛阚, 那简饶空, 曾毋沙乜, 养鞠须丰, 巢关蒯相, 查后荆红, 游竺权逯, 盖益桓公, 万俟司马, 上官欧阳, 夏侯诸葛, 闻人东方, 赫连皇甫, 尉迟公羊, 澹台公冶, 宗政濮阳, 淳于单于, 太叔申屠, 公孙仲孙, 轩辕令狐, 钟离宇文, 长孙慕容, 鲜于闾丘, 司徒司空, 丌官司寇, 仉督子车, 颛孙端木, 巫马公西, 漆雕乐正, 壤驷公良, 拓跋夹谷, 宰父谷梁, 晋楚闫法, 汝鄢涂钦, 段干百里, 东郭南门, 呼延归海, 羊舌微生, 岳帅缑亢, 况郈有琴, 梁丘左丘, 东门西门, 商牟佘佴, 伯赏南宫, 墨哈谯笪, 年爱阳佟, 第五言福, 百家姓终, 经被定义]
1.2 获取男女生姓名
java
package com.IOproject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test01 {
public static void main(String[] args) throws IOException {
//1.定义变量记录网址
String familyNameNet="https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";
String boyNameNet="http://www.haoming8.cn/baobao/10881.html";
String girlNameNet="http://www.haoming8.cn/baobao/7641.html";
//2.爬取数据,把网址上所有的数据拼接成一个字符串
String familystr = webCrawler(familyNameNet);
String boystr = webCrawler(familyNameNet);
String girlstr = webCrawler(familyNameNet);
//3.通过正则表达式,把其中符合要求的数据获取出来
ArrayList<String> familyNameList=getData(familystr,"(.{4})(,|。)",1);
ArrayList<String> BoyNameList=getData(boystr,"([\\u4E00-\\u9FA5]{2})(,|。)",1);
ArrayList<String> GirlNameList=getData(girlstr,"(.. ){4}..",0);
System.out.println(BoyNameList);
//注意:姓名和名字的正则表达式要根据网站上字符串的特征编写
//汉字的正则表达式为:[\\u4E00-\\u9FA5]
}
//作用:从网络中爬取数据,把数据拼接成字符串返回
//参数:网址 返回值:爬取到的所有数据
public static String webCrawler(String net) throws IOException {
//1.定义一个stringbuilder对象来拼接爬取到的数据
StringBuilder sb=new StringBuilder();
//2.创建一个URL对象
URL url=new URL(net);
//3.链接上这个网址
//细节:保证网络是通畅的,而且这个网址是可以链接上的
URLConnection conn = url.openConnection();
//conn.getInputStream()是一个字节输入流,但是网址含有中文,所以用字节流更方便,于是想到了转换流
InputStreamReader isr=new InputStreamReader(conn.getInputStream());//isr是字符流输入
//4.读取数据
int b;
while ((b=isr.read())!=-1){
sb.append((char)b);
}
//5.释放资源
isr.close();
//6.把读取到的数据返回。
return sb.toString();
}
//作用:根据正则表达式获取字符串中的数据
//参数一:完整的字符串 参数二:正则表达式 参数三:???
public static ArrayList<String> getData(String str,String regex,int index){
//1.创建集合存放数据
ArrayList<String> list=new ArrayList<>();
//2.按照正则表达式的规则,去获取数据
Pattern pattern=Pattern.compile(regex);
//按照pattern的规则,到str中获取数据
Matcher matcher=pattern.matcher(str);
while (matcher.find()){
if(!matcher.group().startsWith("em")){//因为网址更新打印出来有很多em">也匹配到了,所以多加了一个判断
list.add(matcher.group(index)); //group()里面的整数参数:当正则表达式有几组,一个括号为一组,参数为0就是所有组都获取
//参数为1就是只获取第一组,以此类推......
}
}
return list;
}
}
1.3 对数据进行处理
java
//familyNameList数据处理,把每个元素的四个姓氏拆开并添加到一个新的集合当中
ArrayList<String> familyFinalList=new ArrayList<>();
for (String s : familyNameList) {
//s是赵钱孙李
for(int i=0;i<s.length();i++){
familyFinalList.add(s.charAt(i)+"");
}
}
//男生名字BoyNameList
//处理方案:去除其中的重复元素
ArrayList<String> BoyFinalList=new ArrayList<>();
for (String s : BoyNameList) {
if(!BoyFinalList.contains(s)){
BoyFinalList.add(s);
}
}
//女生名字GirlFinal
//处理方案:把里面的每一个元素用空格进行切割,得到每一个女生的名字
ArrayList<String> GirlFinalName=new ArrayList<>();
for (String s : GirlNameList) {
//s是xx ss yy zz这种形式的元素
String[] arr = s.split(" ");
Collections.addAll(GirlFinalName,arr);
}
1.4 生成数据
java
//作用:获取男生和女生的信息,因为在此之前,还是只有姓氏和名字,没有姓名。
/*示例:张三-男-23
形参:
参数一:装着姓氏的集合
参数二:装着男生名字的集合
参数三:装着女生名字的集合
参数四:男生的个数
参数五:女生的个数*/
public static ArrayList<String> getInfos(ArrayList<String> familyFinalList,ArrayList<String> BoyFinalList,ArrayList<String> GirlFinalName,int boyCount,int girlCount ){
//1.生成男生不重复的名字
HashSet<String> boyhs=new HashSet<>();
while (true){
if(boyhs.size()==boyCount){
break;
}
//要保证随机
Collections.shuffle(BoyFinalList);
Collections.shuffle(familyFinalList);
boyhs.add(familyFinalList.get(0)+BoyFinalList.get(0));
}
//1.生成女生不重复的名字
HashSet<String> girlhs=new HashSet<>();
while (true){
if(girlhs.size()==girlCount){
break;
}
//要保证随机
Collections.shuffle(GirlFinalName);
Collections.shuffle(familyFinalList);
girlhs.add(familyFinalList.get(0)+GirlFinalName.get(0));
}
//定义最终要返回的集合。
ArrayList<String> list=new ArrayList<>();
//接下来要构成"张三-男-25"
Random r=new Random();//年龄是随机的
for (String boyh : boyhs) {
int ageboy = r.nextInt(11) + 18;//男生的年龄在18-28
String boyresult=boyh+"-"+"男"+"-"+ageboy;
list.add(boyresult);
}
for (String girlh : girlhs) {
int agegirl = r.nextInt(8) + 18;//男生的年龄在18-25
String girlresult=girlh+"-"+"女"+"-"+agegirl;
list.add(girlresult);
}
return list;
}
1.5 写入文件
java
//5.生成数据
//姓名(唯一)-性别-年龄
ArrayList<String> list = getInfos(familyFinalList, BoyFinalList, GirlFinalName, 70, 50);
//并打乱
Collections.shuffle(list);
//6.写出数据
BufferedWriter bw=new BufferedWriter(new FileWriter("姓名展示.txt"));
for (String s : list) {
bw.write(s);
bw.newLine();
}
bw.close();
1.6 完整代码
java
package com.IOproject;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test01 {
public static void main(String[] args) throws IOException {
//1.定义变量记录网址
String familyNameNet="https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";
String boyNameNet="http://www.haoming8.cn/baobao/10881.html";
String girlNameNet="http://www.haoming8.cn/baobao/7641.html";
//2.爬取数据,把网址上所有的数据拼接成一个字符串
String familystr = webCrawler(familyNameNet);
String boystr = webCrawler(boyNameNet);
String girlstr = webCrawler(girlNameNet);
//3.通过正则表达式,把其中符合要求的数据获取出来,放到集合里面
ArrayList<String> familyNameList=getData(familystr,"(.{4})(,|。)",1);
ArrayList<String> BoyNameList=getData(boystr,"([\\u4E00-\\u9FA5]{2})(、|。)",1);
ArrayList<String> GirlNameList=getData(girlstr,"(.. ){4}..",0);
//注意:姓名和名字的正则表达式要根据网站上字符串的特征编写
//汉字的正则表达式为:[\\u4E00-\\u9FA5]
//familyNameList数据处理,把每个元素的四个姓氏拆开并添加到一个新的集合当中
ArrayList<String> familyFinalList=new ArrayList<>();
for (String s : familyNameList) {
//s是赵钱孙李
for(int i=0;i<s.length();i++){
familyFinalList.add(s.charAt(i)+"");
}
}
//男生名字BoyNameList
//处理方案:去除其中的重复元素
ArrayList<String> BoyFinalList=new ArrayList<>();
for (String s : BoyNameList) {
if(!BoyFinalList.contains(s)){
BoyFinalList.add(s);
}
}
//女生名字GirlFinal
//处理方案:把里面的每一个元素用空格进行切割,得到每一个女生的名字
ArrayList<String> GirlFinalName=new ArrayList<>();
for (String s : GirlNameList) {
//s是xx ss yy zz这种形式的元素
String[] arr = s.split(" ");
Collections.addAll(GirlFinalName,arr);
}
//5.生成数据
//姓名(唯一)-性别-年龄
ArrayList<String> list = getInfos(familyFinalList, BoyFinalList, GirlFinalName, 70, 50);
//并打乱
Collections.shuffle(list);
//6.写出数据
BufferedWriter bw=new BufferedWriter(new FileWriter("姓名展示.txt"));
for (String s : list) {
bw.write(s);
bw.newLine();
}
bw.close();
}
//作用:获取男生和女生的信息,因为在此之前,还是只有姓氏和名字,没有姓名。
/*示例:张三-男-23
形参:
参数一:装着姓氏的集合
参数二:装着男生名字的集合
参数三:装着女生名字的集合
参数四:男生的个数
参数五:女生的个数*/
public static ArrayList<String> getInfos(ArrayList<String> familyFinalList,ArrayList<String> BoyFinalList,ArrayList<String> GirlFinalName,int boyCount,int girlCount ){
//1.生成男生不重复的名字
HashSet<String> boyhs=new HashSet<>();
while (true){
if(boyhs.size()==boyCount){
break;
}
//要保证随机
Collections.shuffle(BoyFinalList);
Collections.shuffle(familyFinalList);
boyhs.add(familyFinalList.get(0)+BoyFinalList.get(0));
}
//1.生成女生不重复的名字
HashSet<String> girlhs=new HashSet<>();
while (true){
if(girlhs.size()==girlCount){
break;
}
//要保证随机
Collections.shuffle(GirlFinalName);
Collections.shuffle(familyFinalList);
girlhs.add(familyFinalList.get(0)+GirlFinalName.get(0));
}
//定义最终要返回的集合。
ArrayList<String> list=new ArrayList<>();
//接下来要构成"张三-男-25"
Random r=new Random();//年龄是随机的
for (String boyh : boyhs) {
int ageboy = r.nextInt(11) + 18;//男生的年龄在18-28
String boyresult=boyh+"-"+"男"+"-"+ageboy;
list.add(boyresult);
}
for (String girlh : girlhs) {
int agegirl = r.nextInt(8) + 18;//男生的年龄在18-25
String girlresult=girlh+"-"+"女"+"-"+agegirl;
list.add(girlresult);
}
return list;
}
//作用:从网络中爬取数据,把数据拼接成字符串返回
//参数:网址 返回值:爬取到的所有数据
public static String webCrawler(String net) throws IOException {
//1.定义一个stringbuilder对象来拼接爬取到的数据
StringBuilder sb=new StringBuilder();
//2.创建一个URL对象
URL url=new URL(net);
//3.链接上这个网址
//细节:保证网络是通畅的,而且这个网址是可以链接上的
URLConnection conn = url.openConnection();
//conn.getInputStream()是一个字节输入流,但是网址含有中文,所以用字节流更方便,于是想到了转换流
InputStreamReader isr=new InputStreamReader(conn.getInputStream());//isr是字符流输入
//4.读取数据
int b;
while ((b=isr.read())!=-1){
sb.append((char)b);
}
//5.释放资源
isr.close();
//6.把读取到的数据返回。
return sb.toString();
}
//作用:根据正则表达式获取字符串中的数据
//参数一:完整的字符串 参数二:正则表达式 参数三:???
public static ArrayList<String> getData(String str,String regex,int index){
//1.创建集合存放数据
ArrayList<String> list=new ArrayList<>();
//2.按照正则表达式的规则,去获取数据
Pattern pattern=Pattern.compile(regex);
//按照pattern的规则,到str中获取数据
Matcher matcher=pattern.matcher(str);
while (matcher.find()){
if(!matcher.group().startsWith("em")){//因为网址更新打印出来有很多em">也匹配到了,所以多加了一个判断
list.add(matcher.group(index)); //group()里面的整数参数:当正则表达式有几组,一个括号为一组,参数为0就是所有组都获取
//参数为1就是只获取第一组,以此类推......
}
}
return list;
}
}
输出结果:

1.7 用hutool工具包来完成上述工作
在网站直接搜索Hutool,进去之后,在左侧找"爬取"相关的栏目,可以找到相关代码:

代码:

仅仅 爬取网络中的数据 是用的糊涂包Hutool,其余的 处理数据、生成数据还是原样子,最后,写入文件也是用糊涂包。

二、带权重的随机点名算法


学生被点名的概率可以当成每个人的权重占比,如果权重占比 相对于 原来 在该文件中为其他人的一半,即为概率下降一半。
比如:原来A的 权重占比 和所有人一样,经过一次被点名,权重占比 就变为了原先所有人的一半。就达成目标了。
java
package com.IOproject;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
public class Test02 {
public static void main(String[] args) throws IOException {
//1. 把文件中所有的学生信息读取到内存中
ArrayList<Student> list=new ArrayList<>();
BufferedReader br=new BufferedReader(new FileReader("TEXT"));
String line;
while ((line= br.readLine())!=null){
String[] arr = line.split("-");
Student stu=new Student(arr[0],arr[1],Integer.parseInt(arr[2]),Double.parseDouble(arr[3]));
list.add(stu);
}
br.close();
//2.计算权重总和
double weight=0;
for (Student student : list) {
weight+=student.getWeight();
}
//3.计算每一个人的实际占比 [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]
double [] arr=new double[list.size()];
int index=0;
for (Student student : list) {
arr[index]=student.getWeight()/weight;
index++;
}
//4.计算每一个人的权重占比范围,其实是数轴的长度为权重
for (int i = 1; i < arr.length; i++) {
arr[i]=arr[i-1]+arr[i];
}
//5.随机抽取,抽取的时候要按照权重范围进行
double i = Math.random();
int des=Arrays.binarySearch(arr,i); //利用二分查找
//判断i在arr中的位置
//二分查找方法
//当arr中没有要找的元素时,会返回:-插入点-1
//获取i这个数据在数组当中的插入点位置,该位置的学生权重要减半
int result=-des-1;
//获取该位置的学生
Student stu=list.get(result);
System.out.println(stu);
double v = stu.getWeight() / 2;
stu.setWeight(v);
//7.把list集合中的元素再次写到文件中
BufferedWriter bw=new BufferedWriter(new FileWriter("TEXT"));
for (Student student : list) {
bw.write(student.toString());
bw.newLine();
}
bw.close();
}
}
输出结果


三、登陆注册
练习一

代码
java
package com.IOproject;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) throws IOException {
//1.先读取正确的用户名和密码
BufferedReader br=new BufferedReader(new FileReader("用户名密码信息表.txt"));
String line=br.readLine();
br.close();
String[] useInfo = line.split("&");
String[] arr1 = useInfo[0].split("=");
String[] arr2 = useInfo[1].split("=");
String rightUsername=arr1[1];
String rightPassword=arr2[1];
//2.用户键盘录入用户名和密码
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//3.比较
if(rightUsername.equals(username)&&rightPassword.equals(password)){
System.out.println("登陆成功");
}else{
System.out.println("登陆失败");
}
}
}
输出
java
请输入用户名
zhangsan
请输入密码
123456
登陆成功
练习二

代码
java
package com.IOproject;
import java.io.*;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) throws IOException {
//1.先读取正确的用户名和密码
BufferedReader br=new BufferedReader(new FileReader("用户登录次数表.txt"));
String line=br.readLine();
br.close();
String[] useInfo = line.split("&");
String[] arr1 = useInfo[0].split("=");
String[] arr2 = useInfo[1].split("=");
String[] arr3 = useInfo[2].split("=");
String rightUsername=arr1[1];
String rightPassword=arr2[1];
int count=Integer.parseInt(arr3[1]);
//2.用户键盘录入用户名和密码
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//3.比较
if(rightUsername.equals(username)&&rightPassword.equals(password)&&count<3){
System.out.println("登陆成功");
writeInfo("username="+username+"&password="+password+"&count=0");
}else{
//输入密码不正确或者次数超过三次
count++;
if(count<3){
System.out.println("登录失败,还剩下"+(3-count)+"次机会");
}else{
System.out.println("用户账号被锁定");
}
writeInfo("username="+username+"&password="+password+"&count="+count);
}
}
public static void writeInfo(String line) throws IOException {
BufferedWriter bw=new BufferedWriter(new FileWriter("用户登录次数表.txt"));
bw.write(line);
bw.newLine();
bw.close();
}
}
输出结果
java
请输入用户名
zhangsan
请输入密码
123
登录失败,还剩下2次机会
文件:

