【发布时间】:2016-11-02 17:18:05
【问题描述】:
我正在开发一个益智程序,其中用户输入两个字符串数组(xs,ys),数组的长度可能会有所不同。每个数组中的每个元素都是等价的。我必须搜索两个数组并找到相似的值来解决它。
我所做的是创建一个包含等效元素的 ArrayList。但是,我必须过滤 ArrayList 才能找到特定的值。
例如,如果用户输入 xs = [x, y, 1, x] ys = [3, 4, 1, 3] 这意味着 x = 3, y = 4, 1 = 1, x = 3
我现在要做的是过滤包含相似值的 ArrayList(匹配),以确保它只包含一种类型的整数。 例如,如果用户输入: xs = [x, y, 1, x] ys = [3, 4, 1, 5] 那么这将是无效的,因为 x 不能同时是 3 和 5。
我开始使用 IF 语句编写代码,但是,考虑到用户可以输入的可能值,我意识到这样做效率不高。我还意识到我的求解布尔值也可以被覆盖。我在下面复制了我的代码:
ArrayList<String> match = new ArrayList<String>();
for (i = 0; i < size; i++) {
match.add(xs[i]); //filtering equivalent elements
match.add(ys[i]);
for (j = 0; j < size; j++) {
if ((xs[i] == xs[j]) || ys[i] == ys[j] || xs[i] == ys[j] || ys[i] == xs[j]) {
match.add(xs[j]); // adding any other values which are same
match.add(ys[j]);
}
for (t = 0; t < match.size(); t++) {
boolean hasDigit = (match.get(t)).matches(".*\\d.*");
int digit = (-1); // initialising digit
if (hasDigit && digit == (-1)) {
digit = match.get(t); // all integers must be equal to this value to be considered valid
solve = true;
} else if (hasDigit && digit == match.get(t) && digit != (-1)) {
solve = true;
} else if (hasDigit && digit != match.get(t) && digit != (-1)) {
solve = false;
}
}
我认为这是错误的原因是因为假设我有 x (2, 5, 2) 的 3 个整数值。由于 digit = 2,这将返回为 solve = true,当 5 != 2 时,它将为 false,但当它执行 2 != 2 时,它将变为 true。但是还是无效。
提前谢谢你。
【问题讨论】:
-
你为什么要在
-1周围加上括号? -
我已经习惯了,让事情看起来更清晰。
-
在stackoverflow.com/a/40099027/3344829987654321@的类似帖子上查看我的 SO 答案
标签: java arrays for-loop arraylist