2011-11-15 88 views
1

我想我的代碼的這部分爲我的計算器,因爲我用變量替換x我需要確保類似2x的東西是2 * x。爲什麼這個代碼在前面有+時添加'*'?
if pLine =「1 + x」;Java循環字符串replacemnet

它爲什麼還添加「*」?

for (int j = 0; j < pLine.length(); j++) 
    { 
     if (pLine.charAt(j) == 'X' || pLine.charAt(j) == 'x') 
     { 
      if(pLine.charAt(j-1) != '+' || pLine.charAt(j-1) != '-' || pLine.charAt(j-1) != '/' || pLine.charAt(j-1) != '*') 
       { 

       pLine = pLine.substring(0, j) + "*" + pLine.substring(j, pLine.length()); 
       System.out.println(pLine.substring(0, j)); 
       break; 



       } 
      else 
      { 

      } 


     } 

    } 

回答

5

你的布爾邏輯,在這條線

if (pLine.charAt(j-1) != '+' || pLine.charAt(j-1) != '-' || pLine.charAt(j-1) != '/' || pLine.charAt(j-1) != '*') 

該語句將永遠是真正的不正確的,因爲不管這個角色是什麼,它要麼不等於'+'或將是不等於'-'

它應該是這樣的:

char c = pLine.charAt(j-1); 
if (!(c == '+' || c == '-' || c == '/' || c == '*')) 

或者這樣:

if (c != '+' && c != '-' && c != '/' && c != '*') 

閱讀De Morgan's Laws關於爲什麼這兩個表達式是等效更多的解釋。

+0

感謝它的工作和意義 –

0

在下面一行:

if(pLine.charAt(j-1) != '+' || pLine.charAt(j-1) != '-' || pLine.charAt(j-1) != '/' || pLine.charAt(j-1) != '*') 

你應該有&&而不是||