Java 程序在执行之前挂起
Java program hangs when executed when it didn't before
当我运行这个程序挂了,是不是和代码有关?因为如果是这样,我就无法发现错误。
public class PalindromeSolution {
public static void main(String [] args) {
String [] arr;
String s1 = "taco cat";
boolean palindrome = true;
s1 = s1.replaceAll("\s", "");
arr = s1.split("(?!^)");
int i = 0;
while(i < arr.length) {
if(arr[i] == arr[(arr.length - 1) - i]) {
i++;
} else {
palindrome = false;
break;
}
}
System.out.println("Is palindrome: " + palindrome);
}
}
它不适合我。但这是不正确的,
因为你不应该将字符串与 ==
进行比较,
你应该使用 .equals()
。
通过此更改,它将 运行 正确:
if(arr[i].equals(arr[(arr.length - 1) - i])) {
...虽然很差:
- 为什么拆分成字符串?最好使用
s1.toCharArray()
- 为什么要迭代到
arr.length
? arr.length / 2
就够了
for
循环比 while
循环更自然
像这样:
String s1 = "taco cat";
boolean palindrome = true;
s1 = s1.replaceAll("\s", "");
char[] arr = s1.toCharArray();
for (int i = 0; i < arr.length / 2; ++i) {
if (arr[i] != arr[(arr.length - 1) - i]) {
palindrome = false;
break;
}
}
System.out.println("Is palindrome: " + palindrome);
您可以使用 StringBuffer 以保持代码简单:
s1 = s1.replaceAll("\s", "");
StringBuffer str2=new StringBuffer(s1);
str2.reverse();
if(str2.toString().equals(s1))
return true;
else
return false
当我运行这个程序挂了,是不是和代码有关?因为如果是这样,我就无法发现错误。
public class PalindromeSolution {
public static void main(String [] args) {
String [] arr;
String s1 = "taco cat";
boolean palindrome = true;
s1 = s1.replaceAll("\s", "");
arr = s1.split("(?!^)");
int i = 0;
while(i < arr.length) {
if(arr[i] == arr[(arr.length - 1) - i]) {
i++;
} else {
palindrome = false;
break;
}
}
System.out.println("Is palindrome: " + palindrome);
}
}
它不适合我。但这是不正确的,
因为你不应该将字符串与 ==
进行比较,
你应该使用 .equals()
。
通过此更改,它将 运行 正确:
if(arr[i].equals(arr[(arr.length - 1) - i])) {
...虽然很差:
- 为什么拆分成字符串?最好使用
s1.toCharArray()
- 为什么要迭代到
arr.length
?arr.length / 2
就够了 for
循环比while
循环更自然
像这样:
String s1 = "taco cat";
boolean palindrome = true;
s1 = s1.replaceAll("\s", "");
char[] arr = s1.toCharArray();
for (int i = 0; i < arr.length / 2; ++i) {
if (arr[i] != arr[(arr.length - 1) - i]) {
palindrome = false;
break;
}
}
System.out.println("Is palindrome: " + palindrome);
您可以使用 StringBuffer 以保持代码简单:
s1 = s1.replaceAll("\s", "");
StringBuffer str2=new StringBuffer(s1);
str2.reverse();
if(str2.toString().equals(s1))
return true;
else
return false