利用反射进行加减乘除运算(没有考虑优先级,按照从左到右的顺序计算)

利用反射进行加减乘除运算(没有考虑优先级,按照从左到右的顺序计算)

利用反射进行加减乘除运算思路

一-首先创建一个方法用来接收输入的字符串
二-然后对字符串进行分类
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;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值