import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner; public class SE2_1 {// Software Engineering 軟件工程 作業2
public RN getAnswer(RN[] Operand, String[] AS) {
ArrayList<String> A = new ArrayList<String>();
ArrayList<RN> O = new ArrayList<RN>();
RN temp = new RN();
temp.setSign(0);
System.out.println();
for (String as : AS){
A.add(as);
System.out.print(as+" ");
}
System.out.println();
for (RN op : Operand) {
O.add(op);
System.out.print(op.getNumber()+" ");
}
System.out.println();
while (A.get(0) != "=") {
if (A.contains("×") || A.contains("÷")) {
if (((A.contains("×") ^ A.contains("÷")) == true ? (A
.contains("×") == true ? true : false) : (A
.indexOf("×") < A.indexOf("÷") ? true : false))) {
int index = A.indexOf("×");
System.out.print(index + " × ");
System.out.println(O.get(index).getNumber()
+ "*"
+ O.get(index + 1).getNumber()
+ "="
+ (O.get(index).getNumber() * O.get(index + 1)
.getNumber()));
temp.setDecimal((O.get(index).getNumber()
* O.get(index + 1).getNumber()));
O.set(index, temp);
System.out.println("here set " + O.get(index).getNumber() +" at " +index);
System.out.println("here remove " + O.get(index+1).getNumber()+" from "+(index+1)+" and remove "+ A.get(index)+" from "+index);
O.remove(index + 1);
A.remove(index);
} else {
int index = A.indexOf("÷");
System.out.print(index + " ÷ ");
System.out.println(O.get(index).getNumber()
+ "/"
+ O.get(index + 1).getNumber()
+ "="
+ (O.get(index).getNumber() / O.get(index + 1)
.getNumber()));
temp.setDecimal((O.get(index).getNumber()
/ O.get(index + 1).getNumber()));
O.set(index, temp);
System.out.println("here set " + O.get(index).getNumber() +" at " +index);
System.out.println("here remove " + O.get(index+1).getNumber()+" from "+(index+1)+" and remove "+ A.get(index)+" from "+index);
O.remove(index + 1);
A.remove(index);
}
} else if (A.contains("+") || A.contains("-")) {
if (((A.contains("+") ^ A.contains("-")) == true ? (A
.contains("+") == true ? true : false) : (A
.indexOf("+") < A.indexOf("-") ? true : false))) {
int index = A.indexOf("+");
System.out.print(index + " + ");
System.out.println(O.get(index).getNumber()
+ "+"
+ O.get(index + 1).getNumber()
+ "="
+ (O.get(index).getNumber() + O.get(index + 1)
.getNumber()));
temp.setDecimal((O.get(index).getNumber()
+ O.get(index + 1).getNumber()));
O.set(index, temp);
System.out.println("here set " + O.get(index).getNumber() +" at " +index);
System.out.println("here remove " + O.get(index+1).getNumber()+" from "+(index+1)+" and remove "+ A.get(index)+" from "+index);
O.remove(index + 1);
A.remove(index);
} else {
int index = A.indexOf("-");
System.out.print(index + " - ");
System.out.println(O.get(index).getNumber()
+ "-"
+ O.get(index + 1).getNumber()
+ "="
+ (O.get(index).getNumber() - O.get(index + 1)
.getNumber()));
temp.setDecimal((O.get(index).getNumber()
- O.get(index + 1).getNumber()));
O.set(index, temp);
System.out.println("here set " + O.get(index).getNumber() +" at " +index);
System.out.println("here remove " + O.get(index+1).getNumber()+" from "+(index+1)+" and remove "+ A.get(index)+" from "+index);
O.remove(index + 1);
A.remove(index);
}
}
// if (A.contains("×")) {
// int index = A.indexOf("×");
// System.out.print(index + " × ");
// System.out.println(O.get(index).getNumber() + "*"
// + O.get(index + 1).getNumber() + "="
// + O.get(index).getNumber()
// * O.get(index + 1).getNumber());
// temp.setDecimal(O.get(index).getNumber()
// * O.get(index + 1).getNumber());
// temp.setSign(0);
// O.set(index, temp);
// O.remove(index + 1);
// A.remove(index);
// } else if (A.contains("÷")) {
// int index = A.indexOf("÷");
// System.out.print(index + " ÷ ");
// System.out.println(O.get(index).getNumber() + "/"
// + O.get(index + 1).getNumber() + "="
// + O.get(index).getNumber()
// / O.get(index + 1).getNumber());
// temp.setDecimal(O.get(index).getNumber()
// / O.get(index + 1).getNumber());
// temp.setSign(0);
// O.set(index, temp);
// O.remove(index + 1);
// A.remove(index);
// }
// else if (A.contains("+")) {
// int index = A.indexOf("+");
// System.out.print(index + " + ");
// System.out.println(O.get(index).getNumber() + "+"
// + O.get(index + 1).getNumber() + "="
// + O.get(index).getNumber()
// + O.get(index + 1).getNumber());
// temp.setDecimal(O.get(index).getNumber()
// + O.get(index + 1).getNumber());
// temp.setSign(0);
// O.set(index, temp);
// O.remove(index + 1);
// A.remove(index);
// } else if (A.contains("-")) {
// int index = A.indexOf("-");
// System.out.print(index + " - ");
// System.out.println(O.get(index).getNumber()
// + "-"
// + O.get(index + 1).getNumber()
// + "="
// + (O.get(index).getNumber() - O.get(index + 1)
// .getNumber()));
// temp.setDecimal(O.get(index).getNumber()
// - O.get(index + 1).getNumber());
// temp.setSign(0);
// O.set(index, temp);
// O.remove(index + 1);
// A.remove(index);
// }
else
System.out.println("error!!");
O.trimToSize();
A.trimToSize();
}
return O.get(0);
} public RN GA(int number) {// Generation algorithm 生成算式
RN[] Operand = new RN[number];
String[] AS = new String[number];
AS[number - 1] = "=";
for (int i = 0; i < number; i++) {// 生成 number 个操作数
Operand[i] = new RN();
switch (new Random().nextInt(2) + 1) {// 這裏設置了Int(2)+1略過 小數
// ifInt(3)就會出現小數
case 0:// 小数[0~1.0) *100
Operand[i]
.setDecimal(((int) (new Random().nextDouble() * 9900)) / 100.0 + 1);
Operand[i].setSign(0); break;
case 1:// 整数[0~n)
Operand[i].setInteger(new Random().nextInt(99) + 1);
Operand[i].setSign(1);
break;
case 2:// 分数
Operand[i].setMolecular(new Random().nextInt(99) + 1);
Operand[i].setDenominator(new Random().nextInt(99) + 1);
Operand[i].setSign(2);
break;
default:
System.exit(0);
}
if (i > 0)
switch (new Random().nextInt(4)) {
case 0:
AS[i - 1] = "+";
// Answer += Operand[i].getNumber();// 答案有待修改
break;
case 1:
AS[i - 1] = "-";
// Answer -= Operand[i].getNumber();
break;
case 2:
AS[i - 1] = "×";
// Answer *= Operand[i].getNumber();
break;
case 3:
AS[i - 1] = "÷";
// Answer /= Operand[i].getNumber();
break;
default:
System.exit(0);
}
// if (new Random().nextBoolean())
// Operand[i] *= -1;
} for (int i = 0; i < number; i++)
System.out.print(Operand[i].toString() + " " + AS[i] + " ");
return getAnswer(Operand, AS);// !!
} public static void main(String[] args) {
SE2_1 test = new SE2_1();
Scanner in = new Scanner(System.in);
int count = 0;
int Num;
do {
System.out.println("請輸入出題的個數(不超過5):");
Num = in.nextInt();
} while ((Num > 5 || Num < 1) ? true : false);
for (int i = 0; i < Num; i++) {
RN Answer = test.GA(new Random().nextInt(4) + 2);// 确定操作数个数 1~5
// 个RN Answer =
System.out.println("Answer is:" + Answer.getNumber());
double Input = in.nextDouble();
if (Input == Answer.getNumber()
|| Input == Math.round(Answer.getNumber() * 100) / 100.0) {
System.out.println("答對了!");
count++;
} else
System.out.println("答錯了!答案爲:"
+ Math.round(Answer.getNumber() * 100) / 100.0);
}
System.out
.println("一共" + Num + "道題,答對了" + count + "道題,答錯了"
+ (Num - count) + "道題,正確率爲:" + (double) count * 100
/ Num + "%");
} public class F {// Fraction 分數
int Molecular;// 分子
int Denominator = 0;// 分母 void setMolecular(int Molecular) {
this.Molecular = Molecular;
} int getMolecular() {
return Molecular;
} void setDenominator(int Denominator) {
this.Denominator = Denominator;
} int getDenominator() {
return Denominator;
} double getAll() {
return (double) Molecular / Denominator;
} public String toString() {
return Molecular + "/" + Denominator;
}
} public class RN {// Random Number 隨機數
double Decimal;// 小數
int Integer;// 整數
F Fraction = new F();// 分數 int Sign;// 標誌該對象中存儲的是什麼數 void setDecimal(double Decimal) {
this.Decimal = Decimal;
} double getDecimal() {
return Decimal;
} void setInteger(int Integer) {
this.Integer = Integer;
} int getInteger() {
return Integer;
} void setMolecular(int Molecular) {
this.Fraction.setMolecular(Molecular);
} int getMolecular() {
return this.Fraction.getMolecular();
} void setDenominator(int Denominator) {
this.Fraction.setDenominator(Denominator);
} int getDenominator() {
return this.Fraction.getDenominator();
} void setSign(int Sign) {
this.Sign = Sign;
} double getNumber() {
switch (Sign) {
case 0:
return Decimal;
case 1:
return Integer;
case 2:
return Fraction.getAll();
default:
return -1;
}
} public String toString() {
return Fraction.getDenominator() == 0 ? (Integer == 0 ? Decimal
+ "" : Integer + "") : Fraction.toString();
}
}
}

現在只是一個過程,還不是所謂的完整版,所以,還是希望能有高人指點下.

    目前我知道存在的問題是:

      1.運算時,結果是由式子從左到用運算了,沒考慮到優先問題.例如:1+2*3=(1+2)*3=9 而真的答案是 7

        ...這個暫時想到棧處理,但是還在觀望中,看下還有沒更簡單的處理方法,我很嫌麻煩的.

    還有很多功能還沒加進來,我的做法是循序漸進,由簡至繁.如果有什麼比較高明的建議的話.請務必指導下

    已解決:

      現在已經解決上面1的問題,但是還有小錯誤.就是ArrayList set 功能感覺有點問題.還要研究下.

20150401 作业2 结对 四则运算(Doing)的更多相关文章

  1. 20150401 作业2 结对 四则运算ver 1.0

    Web項目下 Tomcat服務器的路徑 /WebContant/ 目錄下 SE2_2.jsp <%@ page language="java" contentType=&qu ...

  2. 结对作业——随机生成四则运算(Core 第7组)

    结对作业 ——随机生成四则运算(core第7组) 吕佳玲 PB16060145 涂涵越 PB16060282 GITHUB地址 https://github.com/hytu99/homework_2 ...

  3. 第二次作业:结对编程,四则运算的GUI实现

    小伙伴:201421123031 余洋 201421123044  潘志坚  题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...

  4. 【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517

    [整体概况] 1.描述最终的代码的实现思路以及关键代码. 2.结对作业两个人配合的过程和两个人分工. 3.API接口文档和两个组的对接. 4.效能分析,优化分析和心得体会. [代码实现] 一. 实现功 ...

  5. 【软件工程第三次作业】结对编程:四则运算( Java 实现)

    1. GitHub 地址 本项目由 莫少政(3117004667).余泽端(3117004679)结对完成. 项目 GitHub 地址:https://github.com/Yuzeduan/Arit ...

  6. 作业1+2.四则运算(改进后完整版,用python写的)_064121陶源

    概述: 用一个星期加上五一的三天假期自学了python,在Mac系统上重新写出了四则运算的程序,编译器是PyCharm,相当于完成了作业2.d)"选一个你从来没有学过的编程语言,试一试实现基 ...

  7. 第三次作业:结对编程--实现表格在APP的导入和显示

    031302517 031302319 ps:共同完成一篇随笔,文章中的第一人称我(517),队友(319) 一.功能分析+实现思路+结队讨论 这里我将功能分析和实现思路还有结对过程中的一些讨论结合在 ...

  8. 个人第二次作业-c++实现四则运算生成器

    c++实现四则运算生成器 GIT地址 Link Git用户名 Redwarx008 学号后五位 61128 博客地址 Link 作业链接 Link 环境配置 使用VS2019社区版,一键式安装,这里不 ...

  9. #个人作业Week2——结对编程对象代码复审

    General 代码能够正确运行,能够正确生成指定数量的题目和答案,并且能够对给出的题目和答案文件进行比对,输出结果. 代码没有非常复杂的逻辑,比较容易理解,但是在缺少注释的情况下有部分代码需要较长时 ...

随机推荐

  1. 一步步教你上架iOS APP

    注意,注意,注意:一定要设置Enable Xombie Objects为不勾选.在Edit Scheme中有一个Run,然后选择Diagnostics,然后取消勾选Enable Zombie Obje ...

  2. 17秋 软件工程 团队第五次作业 Alpha Scrum3

    17秋 软件工程 团队第五次作业 Alpha Scrum3 今日完成的任务 杰麟:java后端学习: 世强:Android的部门基础信息模块的信息显示和对接后台: 港晨:后台管理登陆界面ui设计: 树 ...

  3. JdbcTemolate类的介绍<一>

    JdbcTemolate类的介绍 JdbcTemplate是Spring JDBC的核心类,封装了常见的JDBC的用法,同时尽量避免常见的错误.该类简化JDBC的操作,我们只需要书写提供SQL的代码和 ...

  4. 组件的三大属性state,props,refs与事件处理

    组件的三大属性state state是组件对象最重要的属性, 值是对象(可以包含多个数据),组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 初 ...

  5. P1754 球迷购票问题

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  6. 为什么express中打开服务端只用listen即可

    为什么express中打开服务端只用listen即可:http.createServer(app).listen()与app.listen()的区别 写法一:        

var app = r ...

  7. QT pro文件详细写法+实例

    很多的初学者都没有注意pro 文件的内容 今天简单的介绍一下 这个文件主要内容 TEMPLATE:这个变量是用来定义你的工程将被编译成什么模式.如果没有这个设置,系统将默认编译为application ...

  8. (推荐)用C++来开发Skyline应用

    原文地址:http://www.hailongchang.org/index.php/archives/category/terraexplorer 供大家学习参考.

  9. sql函数创建

    语法: CREATE [OR REPLACE] FUNCTION function_name (arguments) RETURNS return_datatype AS $variable_name ...

  10. ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)

    阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...