本文介紹了如何修復數組越界異常?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我嘗試從字符串數組中提取系數和指數。例如:”x^2+2x+1″或”x^5″或”x^2-x+1″。我在這個多項式構造函數中編寫的代碼適用于大多數情況,但是當字符串的長度為1時,我會得到一個超出界限的索引錯誤:”EXCEPTION in ThREAD”main”java.lang.ArrayIndexOutOfBibsException:index 1 out out bound for Length 1″。我不確定如何解決這個問題。有人能幫我弄一下這段代碼嗎?
如果數組的長度為1,我已嘗試中斷While循環。
public class Polynomial extends PolynomialInterface {
public Polynomial(String s) {
// complete this code
Term newTerm;
DList<Term> dList = new DList<Term>();
int exp = 0;
double coef = 0;
s = s.replaceAll(" ", "");
String[] array = s.split("\+|(?=-)");
for(String i : array){
System.out.println("split: " + i);
}
for (int i = 0; i <= array.length; i++) {
while (array[i].contains("x")) {
exp = 0;
if ((array[i].substring(0, 1).equalsIgnoreCase("x"))) {
coef = 1;
}
if (array[i].substring(0, 1).equals("-") && array[i].substring(1, 2).equalsIgnoreCase("x")) {
coef = -1;
exp = 1;
}
if (array[i].contains("^")) {
int index = array[i].indexOf("^");
String myString = "";
if (index != -1) {
myString = array[i].substring(index + 1, index + 2);
if (!myString.isEmpty()) {
exp = Integer.parseInt(myString);
}
}
}
if (!array[i].contains("^")) {
exp = 1;
}
int end = array[i].indexOf("x");
String subString = "";
if (end != -1) {
subString = array[i].substring(0, end);
if (!subString.isEmpty() && !subString.contains("-")) {
coef = Double.parseDouble(subString);
} else if (!subString.isEmpty() && !subString.equals("-")) {
coef = Double.parseDouble(subString);
}
}
newTerm = new Term(coef, exp);
dList.addLast(newTerm);
if(array.length==1){
break;
}
i++;
}
while (array[i].matches("([-]\d*|\d*)") && (i < array.length)) {
coef = Double.parseDouble(array[i]);
exp = 0;
newTerm = new Term(coef, exp);
dList.addLast(newTerm);
break;
}
}
//super.data = dList;
}
當我調試時,我得到了正確的系數和指數,然后迭代,我得到了一個索引越界錯誤
推薦答案
for (int i = 0; i <= array.length; i++)
您的for循環轉到array.long,這會導致空指針異常。
請記住,在Java數組中,從0開始,以array.length-1結束,因此條件應該是
數組長度
(&L)
這篇關于如何修復數組越界異常?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,