我正在编写一个小程序来判断一个字符串数组是否向前和向后读取相同的内容。现在我的程序应该返回false。我有一点困难,因为当我扫描数组时,我希望第二个forloop扫描第一个for循环所在的相同索引,但是我得到一个未解决的变量错误。我知道有一个更简单的解决方案,但我只想找到解决这个特殊错误的方法。
public class Pal {
public static void main(String[] args) {
String[] pal = {
"alpha",
"beta",
"gamma",
"delta",
"gamma",
"beta",
"alpha",
"donw"
};
System.out.println(palindrome(pal));
}
public static boolean palindrome(String[] pal) {
String[] container = new String[pal.length];
String[] rcontainer = new String[pal.length];
for (int i = 0; i <= pal.length - 1; i++) {
container[i] = pal[i];
}
for (int k = pal.length - 1; k >= 0; k--) {
rcontainer[k] = pal[i];
}
for (int a = 0; a < pal.length; a++) {
if (rcontainer[a].equals(container[a])) {
return true;
}
}
return false;
}
}
答案 0 :(得分:1)
i
未定义。
将行更改为rcontainer[k]=pal[i];
将删除错误,但判断输入是否为回文的逻辑也是错误的。
你必须
改进代码:
rcontainer[k]=pal[k];
请注意,原始数组是原始数组,因此您无需复制原始数组,只需使用public class Pal {
public static void main (String[]args) {
String[] pal= {"alpha", "beta", "gamma", "delta", "gamma", "beta","alpha","donw"};
System.out.println(palindrome(pal));
}
public static boolean palindrome(String[]pal) {
String[]container=new String[pal.length];
String[]rcontainer=new String[pal.length];
for (int i=0;i<=pal.length-1;i++) {
container[i]=pal[i];
}
for (int k=pal.length-1;k>=0;k--) {
rcontainer[k]=pal[pal.length-1-k];
}
for (int a=0;a<pal.length;a++) {
if(!rcontainer[a].equals(container[a])) {
return false;
}
}
return true;
}
}
代替pal
。
答案 1 :(得分:0)
您对本地变量存在问题&#39; i&#39;由于它不在范围内,编译器将发出错误并且代码不会编译!此外,您需要检查您的算法。基于您想要做的事情,我相信我想出了一个您可能想要了解的简单解决方案。希望它会有所帮助。
package palindrome;
public class Pal {
public static void main(String[] args) {
String[] pal1 = {"alpha", "beta", "gamma", "delta", "gamma", "beta", "alpha", "donw"};
String[] pal2 = {"aaa", "aka", "eve", "otto", "abcdefgfedcba"};
System.out.println(palindrome(pal1)); // false
System.out.println(palindrome(pal2)); // true
}
public static boolean isPalindrome(String word) {
StringBuffer sb = new StringBuffer();
int len = word.length();
while (--len >= 0) {
sb.append(word.charAt(len));
}
String reverse = sb.toString();
if (word.equals(reverse)) {
return true;
}
return false;
}
public static boolean palindrome(String[] pal) {
int len = pal.length;
for (int i = 0; i < len; i++) {
String word = pal[i];
if (isPalindrome(word) != true) {
return false;
}
}
return true;
}
}