请耐心等待。我是java的新手,但我很难编码..但我相信有一天我会克服它,所以请帮助我..
字符串数组 - Palindrome是我正在努力在java中建立我的逻辑意义。这是我到目前为止所写的内容
public class Strings1 {
public static void main(String[] args) {
String[] str = {"dadad", "Boomot", "mojmom"};
String[] str1=str;
String[] str2={};
int i=0;
int j=0;
int k=0;
char c='0';
char e='0';
int s = str.length;
System.out.println("number of elements in the array" + s);
try{
x: for(; i<s; i++){
y: for( j=i,k=str[i].length()-1; k>=0; j++,k--){ //j=0; k=5
c = (str[i].charAt(j)); // 0
e = (str[i].charAt(k)); //5
if(c==e)
{
str2[k] = Character.toString(c);
continue;
}
else
break y;
}
System.out.println(str[2]);
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
错误: - ------------ array3中的元素数量 java.lang.ArrayIndexOutOfBoundsException:4 在Strings1.main(Strings1.java:25)
我该怎么办呢?请帮忙。
答案 0 :(得分:0)
k
是str[i].length - 1
。这意味着,k
可以是5
,而str[i]
只能在i
介于0
和2
之间时为您提供一些值,因为str
数组中只有3个元素。因此数组超出绑定异常错误!
答案 1 :(得分:0)
此:
str2[k] = Character.toString(c);
由于str2
是一个空数组,因此每个元素访问都必须失败。
您可能想要的是使用单个字符串来检测回文(或任何您想要做的事情)。为它写一个方法。然后,编写另一个处理字符串数组的方法,并将您的方法用于单个字符串。这将有助于避免嵌套循环和松散的索引控制。
答案 2 :(得分:0)
数组str2
的大小为0
,并尝试在第str2[k] = Character.toString(c);
行的数组中插入该条目
请将数组str2
初始化为String[] str2=new String[length];
并继续前进
答案 3 :(得分:0)
k=str[i].length()-1;
i = 0
,str
的第一个元素是"dadad"
,长度= 5,k =现在4。
str2[k] = Character.toString(c);
此数组没有元素并抛出ArrayIndexOutOfBoundsException
答案 4 :(得分:0)
不确定你要做什么。那个内圈看起来很腥,你在这里养成了坏习惯。
尝试使用不带标签,如果可以,请使用continue
和break
,使用本地声明的变量(即仅在需要时声明它们,而不是更早)不要试图尽早优化(即在需要时计算str.length()
,它实际上不需要你花费)。
此外,use assertions验证您的假设确实如此。不要忘记使用-ea
选项启动程序以启用断言。
进行一些编辑以显示我的意思:
class Test {
public static void main(String[] args) {
String[] str = { "dadad", "Boomot", "mojmom" };
String[] str1 = str;
String[] str2 = {};
System.out.println("number of elements in the array " + str.length);
try {
for (int i = 0; i < str.length; i++) {
boolean stop = false;
for (int j = i, k = str[i].length() - 1; k >= 0 && !stop; j++, k--) { // Work on this!!!!
assert 0<=j && j<str[i].length();
assert k<=j && k<str[i].length();
char c = (str[i].charAt(j));
char e = (str[i].charAt(k));
if (c == e) {
str2[k] = Character.toString(c);
} else {
// NOPE!
stop = true;
}
}
System.out.println(str[2]);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}