java代码

package per.java.shejiti;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class XiaoXueShuXueJiSuan{
	static Scanner sc = new Scanner(System.in);                      
	static int score;        // 分数
	static long time;        // 时间
	static int book;         // 控制操作不重复
	static String [] achievement = new String[11];     // 成绩单
	static int index = 0;           // 第 index 次成绩
	public static void main(String[] args) {
		
		System.out.println("请输入用户名ID:");                       // 输入用户名ID
		String str = sc.next();
		
		while(!judge(str)) {          		// 判断用户名ID是否正确, 错误重新输入直到用户名ID正确为止
			System.out.print("请重新输入用户名ID: ");
			str = sc.next();
		}
		System.out.println("用户名正确!");
		try {
			// 此处我放在了这个位置,可以更换
			File file = new File("E:\\Java语言\\Java语言代码\\javaexample//record");
			if(!file.isFile())                                         // 如果没有该文件,就新建一个
				file.createNewFile();
			FileWriter fileWriter = new FileWriter(file, true);        // 通过 true 设置追加
			fileWriter.write("你以前的记录是: \n");
			fileWriter.flush();                                        // 清空缓存区,压入文件
			fileWriter.close();
			boolean flag = true;
			List<Integer> list = new ArrayList<Integer>();      
			for(int i = 0;i < 4;i++)             // 初始化数组,控制前四个运算
				list.add(i);
			while(flag){ 
				System.out.println("请选择:\n(1)开始测试\n(2)检查分数\n(3)退出");
				int choice = sc.nextInt();
				switch(choice) {
					case 1:{                                             // 开始测试
						score = 0;                                      // 重置分数为 0 
						book = list.get(3);                             // 标记上一次运算
						long start = System.currentTimeMillis();        // 开始时间
						Collections.shuffle(list);                      // 对数组乱序,保证前四次运算乱序
						for(int j = 0;j < 10;j++) 
							if(j < 4) calculate(list.get(j));           // 前四次包括 +-*/ 保证每个至少出现一次
							else calculate();
						long end = System.currentTimeMillis();                // 结束时间
						time = (end - start) / 1000;                          // 共用时间
						fileWriter = new FileWriter(file, true);              // 通过 true 设置追加
						fileWriter.write(str + "  " + score + "  " + time + " 秒\n");
						fileWriter.flush();                                   // 清空缓存区,压入文件
						fileWriter.close();                                   // 关闭写入流
						
						System.out.println("\n问题      | 正确答案  | 你的答案 ");
						for(int i = 0;i < 10;i++) 
							System.out.println(achievement[i]);    // 输出每次成绩
						System.out.println();
						index = 0;                                 // 重置成绩单
						
						break;
					}
					case 2:{
						FileReader fileReader = new FileReader(file);
						BufferedReader in = new BufferedReader(fileReader);
						String s;
						while((s = in.readLine()) != null)     // 读取文件全部内容
							System.out.println(s);
						System.out.println();
						fileReader.close();               
						break;
					}
					case 3:{
						System.out.println("退出成功!");
						flag = false;
						file.delete();                    // 删除文件
						break;
					}
				}
			}
		}
		catch(Exception e) {
			e.printStackTrace();
		}
        sc.close();
	}

	//判断用户名是否正确方法
	public static boolean judge(String str) {
		if(str.length() != 6) {                                 // 六位组成
			System.out.println("提示: 憨批, 用户名ID是六位大写字母和数字组成的哦! ");
			return false;
		}
		for(int i = 0;i < 2;i++) 
			if(!Character.isUpperCase(str.charAt(i))) {     // 前两位不是大写字母
				System.out.println("提示: 憨批, 用户名ID的前两位应该是大写字母哦! ");
				return false;
			}
		for(int i = 2;i < 6;i++) 
			if(!Character.isDigit(str.charAt(i))) {         // 后四位不是数字
				System.out.println("提示: 憨批, 用户名ID的后四位应该是数字哦! ");
				return false;
			}
		return true;		
	}
	
	// 随机运算操作
	public static void calculate() {
		int n = (int)(Math.random()*8)%4;    // 四种运算法,随机产生
		while(book == n)                     // 相邻运算不能相同
			n = (int)(Math.random()*8)%4;   
		book = n;
		switch(n) {
			case 0:add();break;
			case 1:subtract();break;
			case 2:multiplication();break;
			case 3:division();break;
		}
	}
	// 有参数运算操作, 重载方法
	public static void calculate(int n) {
		switch(n) {
			case 0:add();break;
			case 1:subtract();break;
			case 2:multiplication();break;
			case 3:division();break;
		}
	}
	
	// +
	public static void add() {            
		int num1 = (int)(Math.random()*99 + 1);              // 产生 [1, 99] 的整数
		int num2 = (int)(Math.random()*(100-num1-1)+1);      // 保证两数运算结果小于100, 以下同理
		System.out.print(num1 + " + " + num2 + " = ");
		int result = sc.nextInt();
		
		achievement[index++] = String.format("%-2d + %-2d = |    %-2d    | %-2d", num1, num2, num1+num2, result);
		if(result == num1+num2)
			score += 10;                                     // 得分加 10 分
	}
	// -
	public static void subtract() {
		int num1 = (int)(Math.random()*99 + 1);
		int num2 = (int)(Math.random()*99 + 1);  
		while(num1 == num2)               // 保证两数不相等
			num2 = (int)(Math.random()*99 + 1);
		if(num1 < num2) {   // 用最大值-最小值
			int temp = num1;
			num1 = num2;
			num2 = temp;
		}
		System.out.print(num1 + " - " + num2 + " = "); 
		int result = sc.nextInt();
		achievement[index++] = String.format("%-2d - %-2d = |    %-2d    | %-2d", num1, num2, num1-num2, result);
		if(Math.abs(Math.abs(num1-num2) - result) < 1e-6)    // 精确到10的-6次方算得分
			score += 10;
	}
	// *
	public static void multiplication() {
		int num1 = (int)(Math.random()*99 + 1);              // 产生 [1, 99] 的整数
		int num2 = (int)(Math.random()*(100/num1-1)+1);   
		System.out.print(num1 + " * " + num2 + " = ");
		int result = sc.nextInt();
		achievement[index++] = String.format("%-2d * %-2d = |    %-2d    | %-2d", num1, num2, num1*num2, result);
		if(result == num1*num2)
			score += 10;
	}
	// /
	public static void division() {
		double weighting = Math.random();
		int num1, num2;
		if(weighting < 50) 
			num1 = (int)(Math.random()*20 + 1);              // 产生 [1, 20] 的整数   加权 50%
		else if(weighting < 80) 
			num1 = (int)(Math.random()*30 + 21);             // 产生 [21, 50] 的整数   加权 30%
		else
			num1 = (int)(Math.random()*49 + 51);             // 产生 [51, 99] 的整数   加权 20%
		if(num1 > 50)                                        // 如果num1 > 50, num2 只能等于 num1 
			num2 = num1;
		else
			num2 = ((int)(Math.random()*(100/num1-1) + 1) )*num1; // num2 必须是 num1 的整数倍,保证结果为整数
		System.out.print(num2 + " / " + num1 + " = ");
		int result = sc.nextInt();
		achievement[index++] = String.format("%-2d / %-2d = |    %-2d    | %-2d", num2, num1, num2/num1, result);
		if(result == num2/num1)
			score += 10;
	}
}

已标记关键词 清除标记
相关推荐
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印   util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设
内容简介 《编写高质量代码:改善Java程序的151个建议》在通往“java技术殿堂”的路上,《编写高质量代码:改善Java程序的151个建议》将为你指点迷津!内容全部由java编码的最佳实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面,对java程序员遇到的各种棘手的疑难问题给出了经验性的解决方案,为java程序员如何编写高质量的java代码提出了151条极为宝贵的建议。对于每一个问题,不仅以建议的方式从正反两面给出了被实践证明为十分优秀的解决方案和非常糟糕的解决方案,而且还分析了问题产生的根源,犹如醍醐灌顶,让人豁然开朗。 《编写高质量代码:改善Java程序的151个建议》一共12章,第1~3章针对java语法本身提出了51条建议,例如覆写变长方法时应该注意哪些事项、final修饰的常量不要在运行期修改、匿名类的构造函数特殊在什么地方等;第4~9章重点针对jdk api的使用提出了80条建议,例如字符串的拼接方法该如何选择、枚举使用时有哪些注意事项、出现nullpointerexception该如何处理、泛型的多重界限该如何使用、多线程编程如何预防死锁,等等;第10~12章针对程序性能、开源的工具和框架、编码风格和编程思想等方面提出了20条建议。 《编写高质量代码:改善Java程序的151个建议》针对每个问题所设计的应用场景都非常典型,给出的建议也都与实践紧密结合。书中的每一条建议都可能在你的下一行代码、下一个应用或下一个项目中崭露头角,建议你将此书搁置在手边,随时查阅,一定能使你的学习和开发工作事半功倍。
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值