2 sinat 33415638 sinat_33415638 于 2016.02.16 16:35 提问

有一个数组,比如{ 1,2,3,5,8},我有a1(),a2()到a10()的10个方法

有一个数组,比如{ 1,2,3,5,8},我有a1(),a2()……a10()的10个方法,怎样执行对应这个数组的方法a1,a2,a3,a5,a8

9个回答

caozhy
caozhy   Ds   Rxr 2016.02.16 22:50

如果a1 a2... a10是类的成员方法,那么可以反射执行。

http://blog.csdn.net/ichsonx/article/details/9108173
只要比拼接出函数名字符串就可以。

qq_18748427
qq_18748427   2016.02.17 17:02

假如类的名字叫做ATest
Class c = ATest.class;
int [] a = new int []{1,2,3,5,8};
for(int i = 0; i< a.length();i++){
Method method = c.getMethod("a"+a[i]);//这是方法名,没有参数
method.invoke(c.newInstance());//运行方法
}

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.29 21:48

用反射,根据每个数组元素生成待调用方法的名称,然后用java的反射机制调用对应的方法。

diaoliwei2
diaoliwei2   Rxr 2016.02.16 16:45

反正有规律,取到数组中值后不可以了吗

sinat_33415638
sinat_33415638 就是我有10个方法分别叫做a1,a2...a10,用户根据需要调用其中的几个方法,输入了这样的数组{1,2,3,5,8},对应调用的10个方法
2 年多之前 回复
lxk_1993
lxk_1993   Rxr 2016.02.16 16:50

不太明白你要表达的意思

sinat_33415638
sinat_33415638 就是我有10个方法分别叫做a1,a2...a10,用户根据需要调用其中的几个方法,输入了这样的数组{1,2,3,5,8},对应调用的的10个方法
2 年多之前 回复
lxk_1993
lxk_1993   Rxr 2016.02.16 17:15

int [] a = new int []{1,2,3,5,8};
for(int i = 0; i< a.length();i++){
int s = a[i];
do(s);
}

void do(int i){
switch(i){
case 1:
a1();
break;
......
}
}

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.16 21:45

什么意思,确实没看懂

Royal_lr
Royal_lr   Ds   Rxr 2016.02.17 11:17

只知道数组,反射能找到所在的类和方法吗

q3733353520
q3733353520   2016.02.17 16:13

函数指针数组,然后对应下标

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
有两个排序数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,实现一个函数,把A2 插入到A1,并且是有序的。
/* 有两个排序数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,实现一个函数,把A2 插入到A1,并且是有序的。 */ #include using namespace std; void fun(int a[],int len1,int b[],int len2) { int i = len1+len2; i--; len1--; len2--; while
scala之reduceLeft
val tmp = (x1, x2, x3, ... xn)  tmp.reduceLeft 会按照如下的步骤执行: 先计算f(x1,x2) ,其中f是一个函数,这个函数是作为tmp.reduceLeft的参数传进去的 然后tmp1 接着tmp1 直到tmp1 最后tmp.reduceLeft 返回tmp1
剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
书中给的解题思路为:从尾到头比较A1和A2中的数字,并把较大的数字复制到A1的合适位置。  以下代码由于被在编辑器中编译运行,所以若有错误,请见谅,重在理解解决方法思路。 public static void merge(int[] A1,int[] A2,int lengthA1,int lengthA2){ int indexA1=lengthA1-1; int indexA2=len
有两个有序数组A1和A2,合并两个有序数组
剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序。解析:从尾到头比较两个数组中的数字,并把较大的赋值到空间大的数组的合适位置。#include&amp;lt;iostream&amp;gt; using namespace std; void Merge(int array1[], int array2[],int le...
数组元素交叉排列的算法题(a1 a2 a3 .. an b1 b2 b3 .. bn -->a 1 b1, a2 b2, a3 b3, .. an bn )
<br />题目:给定整数数组,元素为a1 a2 a3 .. an b1 b2 b3 .. bn元素个数为 2n<br />要求:请生成如下数组,a1 b1, a2 b2, a3 b3, .. an bn.  <br />条件:时间复杂度为O(N),空间复杂度为O(1).<br />来源:http://topic.csdn.net/u/20100623/09/dd25166f-bac4-4b2d-98ab-71cab69f4241.html?54216<br />//********************
问题描述:一个长度为2n的(整型)数组元素为 a1 a2 ... an b1 b2 ... bn 要求: 用O(1)的空间代价, 在O(n)时间内把数组变成 a1 b1 a2 b2 a3 b3 ... an bn
问题描述:一个长度为2n的(整型)数组元素为 a1 a2 ... an b1 b2 ... bn 要求: 用O(1)的空间代价, 在O(n)时间内把数组变成 a1 b1 a2 b2 a3 b3 ... an bn
【清华集训2014】mex
题意有一个长度为nn的数组a1,a2,...,an{a_1,a_2,...,a_n}。mm次询问,每次询问一个区间内最小没有出现过的自然数。解法首先,我们可以发现,对于大于nn的aia_i,我们可将它变成n+1n + 1,这并不会影响最后的答案,证明显然。那我们可以从前往后扫,用线段树维护每个自然数最后出现的位置,及一个区间内所有自然数最后出现的位置中最前的位置(前者是后者在叶子节点的体现)。那我们
vb.net排序文件名算法
输入 : a1,a2,a10,a001   我们知道,如果按照字符串比较,结果应该是 a001,a1,a10,a2,但我们期望的结果应该是a001,a1,a2,a10.   自己写了一个算法,请参考,或者有更好的算法,请赐教
有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解
思路: a1 a2 a3 a4 b1 b2 b3 b4 a1 a2 a3 b1 a4 b2 b3 b4 a1 a2 b1 a3 b2 a4 b3 b4 a1 b1 a2 b2 a3 b3 a4 b4
hihoCoder #1116 : 计算
描述 现在有一个有n个元素的数组a1, a2, ..., an。 记f(i, j) = ai * ai+1 * ... * aj。 初始时,a1 = a2 = ... = an = 0,每次我会修改一个ai的值,你需要实时反馈给我 ∑1 f(i, j)的值 mod 10007。 输入 第一行包含两个数n(1 接下来q行,每行包含两个数i, x,代表我把ai的值改为了