[英]Need help to fix the arrayoutofboundary exception for the below code
如何修復以下代碼的arrayOutOfBoundException錯誤消息。 這在邏輯上對我來說是正確的。 但是我不確定為什么會出現此錯誤。 在這方面需要幫助
public class list {
public String reverseStr(String input){
String reverString = input;
int j=0;
Character rev[] = new Character[reverString.length()-1];
for(int i= reverString.length()-1;i> 0; --i){
for(j = 0;j<= reverString.length()-1; ++j){
rev[j] = reverString.charAt(i);
}
}
String output = String.valueOf(rev[j]);
return output;
}
public static void main(String args[]){
String reverse = "Ambika";
list li = new list();
System.out.println("The reverse of " + reverse + " is " + li.reverseStr(reverse));
}
}
當內部for循環中斷時,j將超出數組范圍。 在String output = String.valueOf(rev[j]);
之前添加j--
在側面說明,您應該使rev
數組足夠大,以使整個字符串通孔
Character rev[] = new Character[reverString.length()];
for(j = 0;j<= reverString.length()-1; ++j){
改成
for(j = 0;j< reverString.length()-1; ++j){
class Untitled {
public static String reverse( final String s )
{
return new StringBuilder(s).reverse().toString();
}
public static void main(String[] args) {
System.out.println( reverse( "Josh" ) );
}
}
so
您初始化的rev
的大小比reverString
的長度reverString
Character rev[] = new Character[reverString.length()-1];
更改為
Character rev[] = new Character[reverString.length()];
實際上,您對於嵌套for循環的整個想法是一團糟。 您可以按以下方式簡化程序;
public class list {
public String reverseStr(String input) {
String reverString = input;
int j = 0;
char rev[] = new char[reverString.length()];
for (int i = reverString.length() - 1; i >= 0; --i) {
rev[j++] = reverString.charAt(i);
}
String output = new String(rev);
return output;
}
public static void main(String args[]) {
String reverse = "Ambika";
list li = new list();
System.out.println("The reverse of " + reverse + " is "
+ li.reverseStr(reverse));
}
}
您的來源中有很多問題,
要定義具有比acutual斯汀大小少一個長度的數組。
Character rev[] = new Character[reverString.length()-1];
應該是
Character rev[] = new Character[reverString.length()-1];
使用索引打印值
String output = String.valueOf(rev[j]);
您可以使用for循環進行打印
for (Character c : rev)
System.out.print(c);
您不需要兩個循環。 一個循環應如下所示
int j = 0;
for (int i = reverString.length() - 1; i >= 0; --i) {
rev[j] = reverString.charAt(i);
j++;
}
最后,您不需要單獨的數組即可保存結果。 您可以將結果保存在String
或StringBuilder
。
我在您的程序中注意到的幾件事。 1.不需要兩個循環來反轉字符串,可以使用一個循環進行遍歷並增加j的值來移動。
int j=0;
for(int i= reverString.length()-1;i>= 0; --i){
rev[j++] = reverString.charAt(i);
}
其次,如果您注意到上述循環,您會發現它實際上被調用了6次,而i的值是(5,4,3,2,1,0),因此您需要一個大小為6的數組,這意味着大小rev的6應該是reverString.length()請參考下面的代碼。
public class List { public String reverseStr(String input){ String reverString = input; int j=0; char rev[] = new char[reverString.length()-1]; for(int i= reverString.length()-1;i>= 0; --i){ rev[j++] = reverString.charAt(i); } String output =String.valueOf(rev); return output; } public static void main(String args[]){ String reverse = "Ambika"; List li = new List(); System.out.println("The reverse of " + reverse + " is " + li.reverseStr(reverse)); }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.