第一次作业——四则运算改进
第一次作业——四则运算
GitHub 链接 https://github.com/wangzn32/-
PSP
|
项目要求
1.能自动生成小学四则运算。
2.题目或者结果必须都是正数。
3.除了正数之外还要支持真分数。
解题思路
1.先能随机产生一些四则运算的题目。
2.要能支持真分数和整数。
3.算式的结果要是正数。
4.要能支持用户输入结果并且判断结果的对错。
拿到这个题目我先在网上找例子,百度等等平台上,然后学习他们的解决方法、思路,尝试理解他们写的东西
代码实现
1 package four; 2 3 import java.util.Random; 4 import java.util.Scanner; 5 6 import javax.script.ScriptEngine; 7 import javax.script.ScriptEngineManager; 8 import javax.script.ScriptException; 9 10 public class tex{ 11 public static void main(String[] args) { 12 IntFourArithmeticOperations1(10, 10); 13 } 14 @SuppressWarnings("resource") 15 public static void IntFourArithmeticOperations1(int number, int bound) { 16 Random random = new Random(); 17 boolean tf = false; 18 Scanner sc = new Scanner(System.in); 19 String [] StrArray = {"+", "×", "-", "÷", "/"}; 20 String Str1 = new String(); 21 ScriptEngineManager manager = new ScriptEngineManager(); 22 ScriptEngine engine = manager.getEngineByName("js"); 23 for(int i = 0; i < number; i++) { 24 int n = random.nextInt(4)+1; 25 int [] num = new int[n+1]; 26 String Str = new String(); 27 for(int k = 0; k <= n; k++) { 28 num[k] = random.nextInt(bound)+1; 29 } 30 for(int j = 0; j < n; j++) { 31 if(n == 1) { 32 Str1 = StrArray[random.nextInt(4)]; 33 }else if(Str.endsWith("/") || Str.endsWith("÷")){ 34 Str1 = StrArray[random.nextInt(3)]; 35 }else{ 36 Str1 = StrArray[random.nextInt(5)]; 37 if(Str1.equals("/")) { 38 while(num[j] == num[j+1]) { 39 num[j+1] = random.nextInt(bound); 40 } 41 int temp = Math.max(num[j], num[j+1]); 42 num[j] = Math.min(num[j], num[j+1]); 43 num[j+1] = temp; 44 } 45 } 46 Str = Str + String.valueOf(num[j]) + Str1; 47 } 48 Str = Str + num[n]; 49 try { 50 String s1 = Str.replace('÷', '/'); 51 String s2 = s1.replace('×', '*'); 52 Object obj = engine.eval(s2); 53 while( obj.toString().contains("-")) { 54 s2 = Str.replaceAll("-", StrArray[random.nextInt(3)]); 55 Str = s2; 56 s2 = s2.replace('×', '*'); 57 s2 = s2.replace('÷', '/'); 58 obj = engine.eval(s2); 59 } 60 61 System.out.print(Str + "="); 62 63 String obj1 = sc.next(); 64 Object obj2 = engine.eval(obj1); 65 if(obj.equals(obj2)) { 66 tf = true; 67 System.out.println(tf); 68 }else { 69 tf = false; 70 if(Double.valueOf(obj.toString()) % 1 != 0) { 71 System.out.println(tf + " 正确答案是:"+obj); 72 }else { 73 double f1 = Double.valueOf(obj.toString()); 74 int f2 = (int)f1; 75 System.out.println(tf + " 正确答案是:"+f2); 76 } 77 } 78 } catch (ScriptException e) { 79 e.printStackTrace(); 80 } 81 } 82 } 83 }
运行结果
性能分析
1.随机生成100万个四则运算式子(数字范围是1-10)
运行结果
用时7.513秒
2.生成10万个算式自动生成答案并且判断True/False
运行结果
用时52.386秒
总结与分析
这是我第一次写这样的作业,这次的作业对我来说有些困难,因为以前我并没有这样的经验,也没有对一门语言有很深的认识,所以这次的任务对我来说找资料的时间占了很多。我在找资料的时候学到了很多东西。在自己动手的时候,尽管遇到很多困难,很多错误,还是很耐心得去找解决的方案。综上,我觉得自己在这次作业中收获良多。