2012-02-12 66 views
-1

嗨我有一個代碼,當你輸入一個表達式時,它將存儲到一個數組,但我的問題是我怎麼能在兩個變量之間放入輸入表達式就像ab + c?它說null值。 這裏是我的代碼:布爾表達式與門Java

stack = strexp.toCharArray();  
for (int k = 0; k < stack.length; k++) { 
    if (Character.isLetter(stack[k]) && Character.isLetter(stack[k+1])){ 
    temp[k] = stack[k]; 
    temp[k+1] = '*'; 
    temp[k+2] = stack[k+1]; 
    } 
} 
+5

這實在不清楚,因爲書面。還有,它是功課嗎? – 2012-02-12 18:08:53

+0

先生,當我運行代碼有一個錯誤說nullpointerexception。例如輸入的表達式是ab + c。當這個表達式將被存儲在一個數組中時,它將變成a * b + c。這不是一項功課先生。 – steph22 2012-02-12 18:14:36

回答

2

您會收到一個ArrayIndexOutOfBounds例外,因爲你增加k,直到它等於stack數組中的最後一個索引和然後您嘗試訪問stack[k+1]

你的循環表達必須

for (int k = 0; k < (stack.length-1); k++) 

NullPointerException的原因是不能直接看到,但我相信你沒有初始化的temp陣列。很可能是因爲你不知道它的確切尺寸。

我把結果保存在一個 列表 的StringBuilder代替:

StringBuilder resultBuilder = new StringBuilder(); 
for (int k = 0; k < (stack.length-1); k++) { 
    resultBuilder.append(stack[k]); 
    if (Character.isLetter(stack[k]) && Character.isLetter(stack[k+1])) { 
    resultBuilder.append('*'); 
    } 
} 
resultBuilder.append(stack[stack.length-1]); // don't forget the last element 
+2

我很想推薦使用'StringBuilder'而不是'ArrayList'。 – 2012-02-12 18:32:46

+0

當然,謝謝,StringBuilder!我會在一分鐘內改變它! – 2012-02-12 18:35:13

+0

謝謝,先生,它的工作 – steph22 2012-02-12 18:37:05

0

有2個問題:

1)NPE - 將intializing的temp[]

2解決)ArrayIndexOutOfBoundsException Character.isLetter(stack[k + 1])

使用此代碼來解決兩個問題:

String strexp = "ab+c"; 
    char[] stack = strexp.toCharArray(); 
    for (int k = 0; k < stack.length - 1; k++) 
    { 
     if (Character.isLetter(stack[k]) && Character.isLetter(stack[k + 1])) 
     { 
      char temp[] = new char[3]; 
      temp[k] = stack[k]; 
      temp[k + 1] = '*'; 
      temp[k + 2] = stack[k + 1]; 
     } 
    }