利用反射进行加减乘除运算(没有考虑优先级,按照从左到右的顺序计算)
利用反射进行加减乘除运算思路
一-首先创建一个方法用来接收输入的字符串
二-然后对字符串进行分类
1.运算符放一个集合
通过遍历把不是数字的排出就是运算法
2.数字放一个集合
通过一个正则表达式对字符串进行分割,通过string的split方法分割成字符数组,然后通过Integer的valueOf方法强制转化,存储在集合中
三、通过反射获取进行运算的方法
1.有三种反射方式进行反射,创建有运算方法类的对象,第四种发射方法就不写了,跟全类名的那个差不多。
举例:
2.然后通过反射寻找方法然后进行运算
3.最后输出结果
代码:
Calunma,java
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Scanner;
public class Calunma {
static ArrayList<Integer> number = new ArrayList<Integer>();
static ArrayList<Character> cha = new ArrayList<Character>();
static Scanner in = new Scanner(System.in);
public static void main(String[] args) throws Exception {
Calunma cal = new Calunma();
cal.getLine();
cal.onCal();
}
// 输入字符串
public void getLine() {
String line = in.nextLine();
char a[] = line.toCharArray();
for (int i = 0; i < line.length(); i++) {
add(a[i]);
}
String regex = "\\D";
String[] re = line.split(regex);
for (int i = 0; i < re.length; i++) {
number.add(Integer.valueOf(re[i]));
}
}
// 判断是符号则进行添加
public boolean add(char a) {
if (a < '0' || a > '9') {
cha.add(a);
return true;
}
return false;
}
// 通过反射进行计算
public void onCal() throws Exception {
// 第一种反射
Count c = new Count();
Class<? extends Count> o = c.getClass();
// 或者
// Class o = c.getClass();
// 第二种反射
// Class<Count> o2 = Count.class;
// Object e = o2.newInstance();
// 第三种反射
// Class<?> c2 = Class.forName("reflect.count");此处是全类名
// Object e = c2.newInstance();
int index = 0;
for (char a : cha) {
Method m = o.getMethod(getName(a), int.class, int.class);
int sum = (int) m.invoke(c, number.get(index++), number.get(index));
number.set(index, sum);
}
System.out.println("运算结果为:" + number.get(index));
}
// 获取算数符号名字
private String getName(char a) {
switch (a) {
case '-':
return "substract";
case '+':
return "add";
case '*':
return "multiply";
case '/':
return "divice";
}
return null;
}
}
Count.java
public class Count {
public int add(int a, int b) {
return a + b;
}
public int substract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divice(int a, int b) {
return a / b;
}
}