【发布时间】:2016-08-14 23:26:39
【问题描述】:
我正在尝试优化我的程序计数器。这取决于数字的大小(从 3 到 10 位,没有重复) - 例如012, 013,214 等我的第一个解决方案是 for 循环,如下所示:
private void sample() {
int[] varValue = new int[3];
innerloop: for (int a = 0; a < 10; a++) {
for (int b = 0; b < 10; b++) {
if (a == b)
continue;
for (int c = 0; c < 10; c++) {
if (c == b)
continue;
if (c == a)
continue;
varValue[0] = a;
varValue[1] = b;
varValue[2] = c;
int EqOne = varValue[0] * 100 + varValue[1] * 10 + varValue[2];
if (EqOne == 432) {
System.out.println(varValue[0]);
System.out.println(varValue[1]);
System.out.println(varValue[2]);
break innerloop;
}
}
}
}
}
或 10 位数字 (https://gist.github.com/TrollerN/6a0e470c539c57fd4cd73086cf6eb41b)
然后我可以将这些 a, b, c 添加到 int[] 或 ArrayList 并使用它。没关系,但是有 10 个不同的数字,它用 if 语句替换了 10 个 for 循环 + 我必须创建 8 种不同的方法 - 每个位数一个。
我还尝试创建 10 位 (0,1,2,3,4,5,6,7,8,9) 的 ArrayList,将其随机播放并返回 3-10 位,但它可能永远不会- 9-10 位数字的结束循环。
我的下一个“好”想法(不,老实说,这是迄今为止最愚蠢的一个:D)是针对每种情况将组合的 ArrayList 保存到文件中,然后加载所需的一个并通过它找到解决方案。
我正在考虑创建一些方法来获取位数(“所以它知道它需要多少个循环”)和/或最后一个解决方案,所以它知道要开始。
编辑: 我已经用示例方法修改了这个问题。当然 int EqOne 和 If 语句要复杂得多,但它在技术上显示了我想要实现的目标 - 至少我希望:P
我一直在寻找一种方法,它可以根据需要创建尽可能多的循环和大数组/数组列表?
【问题讨论】:
-
问题是……?
-
你到底想达到什么目的?
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:minimal reproducible example 和 How to Ask。
-
你没有说清楚这段代码应该做什么,这使得无法回答。如果我猜的话,我会说您似乎正在尝试输出多个数字的不同排列?例如。 1+2 可能是 12 或 21。使用嵌套的 for 循环,您不知道需要多少级别,一种解决方案可能是递归。这取决于你真正想要达到的目标。
-
获取我可以使用的 int[] 或 ArrayList 值,这将不断变化并寻找解决方案。
标签: java performance for-loop arraylist counter