下面是我正在处理的问题和我的代码片段。是否有更好的方法来实现这一点?下面我使用了基本的控制结构。
是否最好将行和列存储在映射中,并根据键/值对对映射进行搜索?
大楼入口处有一个安全键盘。它以3x3矩阵格式有9个数字1-9。
1 2 3
4 5 6
7 8 9
安全性已决定允许一个人出现一个数字错误,但该数字应该是水平的或垂直的。示例: 5允许用户输入2、4、6、8或4,允许用户输入1、5、7。如果要输入的安全代码为1478,如果用户输入1178,则应允许输入。
下面是我正在编写的代码片段:
ArrayList<Integer> list = new ArrayList<Integer>();
int num = 9;
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
for(int i =0;i< arr.length;i++){
for(int j = 0; j <arr.length;j++){
if(num == arr[i][j]){
row = i;
col = j;
break;
}
}
}
for(int j1 = 0; j1< 3 ; j1++){
if(arr[row][j1] != num){
list.add(arr[row][j1]);
}
}
for(int i1 = 0 ; i1 <3;i1++){
if(arr[i1][col] != num){
list.add(arr[i1][col]);
}
}发布于 2010-10-21 04:53:48
解决这个问题的方法有很多,但我认为使用HashMaps和HashSets可以比执行几次迭代更有效地解决这个问题。
如果我是您,我将首先使用哈希映射和哈希集构建数据模型。这是因为哈希映射和哈希集具有快速查找(没有迭代)。
HashMap<Integer,HashSet<Integer>> values = new HashMap<Integer, HashSet<Integer>>();
//now put in the accepted values for one
HashSet<Integer> oneValues = new HashSet<Integer>();
oneValues.put(1);
oneValues.put(2);
oneValues.put(4);
values.put(1, oneValues);
//put in 2 values
......然后,当您解析输入时,如果您想查看输入的值是否为代码所接受,只需执行以下操作
private boolean isAccepted(int input, int combinationValue)
{
// check to see if the inputed value in the accepted values set
return values.get(combinationValue).contains(input);
}发布于 2010-10-21 05:05:32
我倾向于想要一个类似于isCloseTo(int a, int b)的函数,也就是说,如果我调用isCloseTo(5, 5),它将返回true。如果我调用isCloseTo(2, 5),它也应该返回true。但是如果我打电话给isCloseTo(1, 3),它就会返回false。
所以我会写这样的测试:
assertTrue(isCloseTo(5, 5));
好吧,这真的很容易通过:
public boolean isCloseTo(int a, int b) {return true;}那么,也许
assertFalse(isCloseTo(1, 3));
在上面的实现中失败,所以我需要更改它
public boolean isCloseTo(int a, int b) {return a == b;}这仍然是一个不完整的实现,所以我们需要另一个测试
assertTrue(isCloseTo(1, 2));
现在我们开始需要一些真正的物质。我想我会把剩下的留给读者做练习。是的,我忽略了一些棘手的问题,但这是一种策略(测试驱动的设计),它可以直接引导您找到解决方案,而不仅仅是试图编写代码。只要你保持所有的测试通过,你就会朝着一个完整的解决方案稳步前进。祝好运!
发布于 2010-10-21 06:02:12
或者这个..。
boolean matchDigit(int p, int d) {
return (p==d)
|| (p==d-3)
|| (p==d+3)
|| (d%3!=1 && p==d-1)
|| (d%3!=0 && p==d+1);
} 这假设我们已经确定p和d介于1到9之间。
https://stackoverflow.com/questions/3984320
复制相似问题