我有一个生成字符串2D数组的方法,然后将它们放在ArrayList
中。我正在尝试编写一个方法,该方法采用一个新的2D数组并检查它已经在数组中用于复制。这就是我到目前为止,它应该返回true
以获得新的解决方案,但每次都会返回false
。调用方法打印出阵列,我可以看到它们不一样。
public static boolean tester(String[][] b, ArrayList<String[][]> s)
{
if (s.size() == 1) return true;
boolean n = true;
int count;
int size = b.length * b[0].length;
for (int i = 0; n && i < s.size() -1; i ++)
{
count = 0;
for (int j = 0; j < s.get(i).length; j ++)
for (int k = 0; k < s.get(i)[0].length; k ++)
if (s.get(i)[j][k].equals(b[j][k])) count ++;
if (count == size) n = false;
}
return n;
}
答案 0 :(得分:0)
public static boolean nonDuplicate(ArrayList<String[][]> s, String[][] b){
for(String[][] e : s){
if(Arrays.deepEquals(e, b)) return false; //e and b are duplicates
}
return true;
}
您的代码可能不正确,因为您没有在for循环周围使用大括号({}
)。所以当你写道:
for (int j = 0; j < s.get(i).length; j ++)
for (int k = 0; k < s.get(i)[0].length; k ++)
if (s.get(i)[j][k].equals(b[j][k])) count ++;
if (count == size) n = false;
它被解释为:
for (int j = 0; j < s.get(i).length; j ++){
for (int k = 0; k < s.get(i)[0].length; k ++){
if (s.get(i)[j][k].equals(b[j][k])) count ++;
}
}
if (count == size) n = false;
这很可能(?)不是你的意图通过你的缩进来判断,但值得注意的是,除了分隔标记之外,空格(包括缩进)在java中并不是非常重要。
答案 1 :(得分:0)
这是编译器解释代码的方式:
for (int i = 0; n && i < s.size() -1; i ++)
{
count = 0;
for (int j = 0; j < s.get(i).length; j ++) {
for (int k = 0; k < s.get(i)[0].length; k ++) {
if (s.get(i)[j][k].equals(b[j][k])) count ++;
}
}
if (count == size) n = false;
}
最好始终使用{
和}
来澄清您对代码编译器/读者的意图。
我猜你想要的是这个:
for (int i = 0; n && i < s.size() -1; i ++)
{
count = 0;
for (int j = 0; j < s.get(i).length; j ++) {
for (int k = 0; k < s.get(i)[0].length; k ++) {
if (s.get(i)[j][k].equals(b[j][k])) {
count ++;
}
if (count == size) {
n = false;
}
}
}
}
但你也可以写:
public static boolean tester(String[][] b, ArrayList<String[][]> s)
{
// ..
for (int i = 0; n && i < s.size() -1; i ++) {
for (int j = 0; j < s.get(i).length; j ++) {
for (int k = 0; k < s.get(i)[0].length; k ++) {
if (s.get(i)[j][k].equals(b[j][k]) == false) {
return true;
}
}
}
}
return false;
}