-1

こんにちは私は式を入力すると配列に格納されるコードを持っていますが、私の問題は、入力式がab + cのような場合に2つの変数の間に*を入れる方法です?それはnull値を言います。これが私のコードです:

 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];
   }
 }
4

2 に答える 2

2

ArrayIndexOutOfBounds例外を受け取る必要があります。これは、配列kの最後のインデックスと等しくなるまでインクリメントしてから、アクセスしようとするためです。stackstack[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
于 2012-02-12T18:23:51.710 に答える
0

2つの問題があります:

1)NPE-初期化することで解決されますtemp[]

2)ArrayIndexOutOfBoundsException atCharacter.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];
        }
    }
于 2012-02-12T18:26:05.470 に答える