需求:单词和方法名听写
1.两套主功能,分别为单词听写和方法名听写
2.不能重复听写
3.方法名在书写的时候需要带小括号
(1)例如 add()
4.单词主要包括如下
static 、void 、public 、private 、 class 、 boolean 、 true 、 false 、 String 、 break 、 continue 、 return 、 Scanner 、Random …
5.单词对应的中文如下
静态 、无返回 、公有 、私有 、类 、布尔 、真 、假 、字符串 、跳出 、结束本次循环 、结束方法 、键盘录入 、随机数 …
6.方法名如下
next()、nextLine()、nextInt()、nextDouble、toCharArray()、charAt()、split()、substring()、replace()、length()、size()、add()、set()、remove()、get()…
7.方法名中文如下
键盘录入字符串、 键盘录入整数、键盘录入小数、讲字符串转成字符数组、通过索引取出字符串的字符、对字符串进行切割、对字符串进行截取、获取字符串的长度、获取集合的长度、集合添加的方法、集合修改的方法、集合删除的方法、集合获取的方法…
9.听写方法雷同
10.加入注册和登录
11.其它功能自行添加
import java.util.*;
public class Demo {
public static void main(String[] args) {
ArrayList<Admin> list = new ArrayList<>();
while (true){
System.out.println("欢迎进入默写小程序");
System.out.println("请输入(1/2/3)");
System.out.println("1.登录");
System.out.println("2.注册");
System.out.println("3.退出");
Scanner sc =new Scanner(System.in);
String c = sc.next();
switch (c){
case "1":if (islogn(list)){
manu();
}else {
System.out.println("请先注册用户,再登录");
}
break;
case "2":isregister(list);
break;
case "3": System.exit(0);
break;
}
}
}
//主菜单
public static void manu() {
while (true) {
System.out.println(" >>>>>>单词与方法名听写<<<<<<");
System.out.println("注意:方法名后面必须带括号,例如add()");
System.out.println("请选择\n");
System.out.println("1.单词听写");
System.out.println("2.方法名听写");
System.out.println("3.退出听写");
Scanner sc = new Scanner(System.in);
List<Data> array = new ArrayList<>();
String choose = sc.next();
switch (choose) {
case "1":
System.out.println("单词拼写");
SpellWord(sc);
System.out.println("您是否想要重新听写一次(y/n)");
String choos1 = sc.next();
if ("y".equals(choos1)) {
SpellWord(sc);
} else {
System.out.println("Bye Bye!");
}
break;
case "2":
System.out.println("方法名听写");
Method(sc);
System.out.println("您是否想要重新听写一次(y/n)");
String choos2 = sc.next();
if ("y".equals(choos2)) {
Method(sc);
} else {
System.out.println("Bye Bye!");
}
break;
case "3":
return;
}
}
}
//单词拼写
public static void SpellWord(Scanner sc) {
List<Data> array = new ArrayList<>();
array.add(new Data("static", "静态"));
array.add(new Data("void", "无返回"));
array.add(new Data("public", "公有"));
array.add(new Data("private", "私有"));
array.add(new Data("class", "类"));
array.add(new Data("boolean", "布尔"));
array.add(new Data("false", "错误"));
array.add(new Data("String", "字符串"));
array.add(new Data("break", "跳出"));
array.add(new Data("continue", "结束本次循环"));
array.add(new Data("return", "返回"));
array.add(new Data("Scanner", "键盘录入"));
array.add(new Data("Random", "随机数"));
System.out.println("您选择的是单词拼写");
System.out.println("请输入此次要拼写单词的个数");
int right = 0;
int number = 1;
float sum = 0;
//输入听写的个数
int Times = sc.nextInt();
Set<Data> hm = new HashSet<>();
while (hm.size() < Times) {
int index = (int) (Math.random() * array.size());
Data d = (Data) array.get(index);
if (hm.add(d)) {
System.out.println(" 第" + (number++) + "题");
System.out.println("请拼写出 " + d.getChina() + " 的英文");
String write = sc.next();
if (write.equals(d.getWord())) {
System.out.println("哎呦不错哦,这题答对了");
sum++;
right++;
if (hm.size() == Times) {
double rights = right / sum;
System.out.println("您本次总共拼写了" + Times + "个单词,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
BackRmind(rights);
}
} else {
System.out.println("这题答案不对,请再接再厉");
sum++;
if (hm.size() == Times) {
double rights = right / sum;
System.out.println("您本次总共拼写了" + Times + "个单词,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
BackRmind(rights);
}
}
}
}
}
//方法名听写
public static void Method(Scanner sc) {
List<Method> Array = new ArrayList<>();
Array.add(new Method("next()", "键盘录入"));
Array.add(new Method("nextLine()", "键盘录入字符串"));
Array.add(new Method("nextInt()", "键盘录入整数"));
Array.add(new Method("nextDouble", "键盘录入小数"));
Array.add(new Method("toCharArray()", "将字符串转成字符数组"));
Array.add(new Method("charAt()", "通过索引取出字符串的字符"));
Array.add(new Method("split()", "对字符串进行切割"));
Array.add(new Method("length()", "获取字符串的长度"));
Array.add(new Method("substring()", "对字符串进行截取"));
Array.add(new Method("replace()", "集合修改的方法"));
Array.add(new Method("size()", "获取集合的长度"));
Array.add(new Method("add()", "集合添加的方法"));
Array.add(new Method("set()", "键盘录入字符串"));
Array.add(new Method("remove()", "集合删除的方法"));
Array.add(new Method("get()", "集合获取的方法"));
System.out.println("您选择的是方法名听写");
System.out.println("请输入此次要拼写方法名的个数");
int right = 0;
int number = 1;
double sum = 0;
int times = sc.nextInt();
Set<Method> set = new HashSet<>();
while (set.size() < times) {
int index = (int) (Math.random() * Array.size());
Method m = Array.get(index);
if (set.add(m)) {
System.out.println(" 第" + (number++) + "题");
System.out.println("请写出 " + m.getMethod_chinese() + " 的英文,记得加()");
String spell = sc.next();
if (spell != null) {
if (spell.equals(m.getPublic_word())) {
System.out.println("哎呦不错哦,这题答对了\n");
sum++;
right++;
if (set.size() == times) {
double rights = right / sum;
System.out.println("您本次总共拼写了" + times + "个方法名,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
BackRmind(rights);
}
} else {
System.out.println("这题答案不对,请再接再厉\n");
sum++;
if (set.size() == times) {
double rights = right / sum;
System.out.println("您本次总共拼写了" + times + "个方法名,其中答对了" + right + "个,正确率为 " + Math.ceil(rights * 100) + "%");
BackRmind(rights);
}
}
} else {
System.out.println("非法输入");
}
}
}
}
// 根据正确率进行反馈提示
public static void BackRmind(double r) {
if (r == 1.00) {
System.out.println("太牛逼了,全对\n");
} else if (r < 1.00 && r >= 0.50) {
System.out.println("还有待提高,请继续努力\n");
} else if (r < 0.50 && r > 0) {
System.out.println("正确率有点低哦,好好背\n");
} else {
System.out.println("一个都不对,还不赶快去背\n");
}
}
// 登录
public static boolean islogn(ArrayList<Admin>list) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入用户名");
String name =sc.next();
System.out.println("请输入密码");
String password=sc.next();
if (list.size()>0){
for (int i =0;i<list.size();i++) {
Admin a = list.get(i);
if (a.getUsername().equals(name) && a.getPassword().equals(password)) {
return true;
} else{
System.out.println("密码或用户名有误,请检查后重新输入");
}
}
}else {
System.out.println("系统没有数据,请先注册");
}
return false;
}
// 注册
public static boolean isregister(ArrayList<Admin>list) {
//创建键盘输入对象
Scanner sc = new Scanner(System.in);
System.out.println("欢迎注册");
//由于不确定用户到底几次可以输出正确的用户名, 因此加入无限循环
String name;
while (true) {
System.out.println("请输入用户名:");
name = sc.next();
//提高效率,如果集合的长度为0, 那么就直接注册成功
if (list.size() == 0) {
//将用户名添加到集合的 管理员对象中
break;
}
//做一个标记, true代表用户名存在, false就代表不存在
boolean flag = false;
//当集合的长度不等于0, 那么就说明集合中已经有注册的管理员
//此时需要注册, 一定要保证用户名不能和集合中的管理员用户名不相同
//循环遍历集合
for (int i = 0; i < list.size(); i++) {
//取出每一位管理员
Admin admin = list.get(i);
//通过管理员对象再获取名字
String username = admin.getUsername();
//判断名字是否和键盘输入的name一样
if (username.equals(name)){
//如果相等, 就再次让用户输入用户名
//跳出for, 来到while继续输入
System.out.println("用户名已存在, 请重新输入:");
//更改标记的状态
flag = true;
break;
}
}
//当for循环结束后, 判断标记的状态, 如果标记的状态还是false,那么就应该结束整个while
//if (flag == false){ --> if (!flag){ 是一样的效果
if (!flag){
//应该结束整个while
break;
}
}
System.out.println("请输入密码:");
String pass = sc.next();
//管理员对象 在无限循环结束以后再创建
Admin d = new Admin();
//将注册的用户名和密码都保存到管理员对象中
d.setUsername(name);
d.setPassword(pass);
//将创建的管理员对象添加到 集合
list.add(d);
return true;
}
}
```java
public class Method {
private String public_word;
private String Method_chinese;
public Method() {
}
public Method(String public_word, String method_chinese) {
this.public_word = public_word;
Method_chinese = method_chinese;
}
public String getPublic_word() {
return public_word;
}
public void setPublic_word(String public_word) {
this.public_word = public_word;
}
public String getMethod_chinese() {
return Method_chinese;
}
public void setMethod_chinese(String method_chinese) {
Method_chinese = method_chinese;
}
}
```java
public class Data {
private String Word;
private String china;
public Data() {
}
public Data(String word, String china) {
Word = word;
this.china = china;
}
public String getWord() {
return Word;
}
public void setWord(String word) {
Word = word;
}
public String getChina() {
return china;
}
public void setChina(String china) {
this.china = china;
}
}
public class Admin {
String username;
String password;
public Admin() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
由于初学JAVA方法用的可能不是最好,欢迎各位提供更好的方案