我有以下代码:
public static void main(String[] args) {
double start = System.nanoTime();
String[] test = {"a","n","d"};
System.out.println(test[0].equals("a"));
System.out.println(test[1].equals("n"));
System.out.println(test[2].equals("d"));
System.out.println(AndTest(test));
double duration = (System.nanoTime() - start) / 1000000000;
System.out.println("Your code took " + duration + " seconds to execute.");
}
public static boolean AndTest(String[] n){
int length = n.length;
for (int i = 0; i < length-3; i++){
if (n[i].equals("a") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
else continue;
}
return false;
}
}
我得到的输出是:
true //first character is a - tested in main body
true
true
false // AndTest returns false
为什么会这样?最初,我以为我在比较两个字符串的方法上犯了一个错误,但我上面插入的测试代码似乎返回了正确的输出(true)。
答案 0 :(得分:2)
for (int i = 0; i < length-3
你的长度应该是3,所以3 - 3一直是0. 0 < 0
所以它会自动返回false。使它的长度减去2.或者只是我&lt; 1。
答案 1 :(得分:1)
以下行会导致您的问题。
for (int i = 0; i < length - 3; i++) {
/*
length = 3,
length - 3 == 0,
0 < 0 == false,
the `for` statement doesn't execute
the method returns `false`
*/
答案 2 :(得分:1)
为什么会这样?最初,我认为我在比较两个字符串的方法上犯了一个错误,但我上面插入的测试代码似乎返回了正确的输出(true)。
这是因为您正在执行length-3
并且在您的情况下这是0,因此for
循环始终会返回false
您的最后一行return false;
所以请确保这个长度很小。
我已将您的for loop
更改为:
public static boolean AndTest(String[] n){
int length = n.length;
for (int i = 0; i < length; i++){
if (n[i].equals("a") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
else continue;
}
return false;
}
输出
真
真
真
真
您的代码需要7.59064E-4秒才能执行。
我不知道你究竟想要什么,也许只是寻求效率,但这样做的时间更短。