所以我的計數器不應該為字串計算 1,":DD"這就是為什么我寫的只有當我的字串的長度是2計數器應該加上 1。但是它增加了 1,盡管字串長度是3。這是為什么呢?
PS:我已經length() <=3在第一個if宣告中加入else if了第二個if宣告之后的另一個宣告。
int counter = 0;
String tgt = ":DD";
for (int i = 0; i < a.size(); i ) {
if (tgt.length() <= 3 && tgt.charAt(0) == ':' || tgt.charAt(0) == ';') {
if (tgt.length() == 2 &&
tgt.charAt(1) == ')' || tgt.charAt(1) == 'D') {
counter = 1;
}
}
}
uj5u.com熱心網友回復:
該&&運營商的優先級高于||,搞亂你打算邏輯。
在Java的運營商頁面列出優先順序的Java運營商。
因此,就好像括號圍繞著兩個&&運算元:
if ((tgt.length() <= 3 && tgt.charAt(0) == ':') || tgt.charAt(0) == ';')
{
if ((tgt.length() == 2 && tgt.charAt(1) == ')') || tgt.charAt(1) == 'D')
在第二個if條件下,&&可能回傳 false,但第二個(索引 1)字符是'D',所以整個條件是true并且您的計數器得到更新。
在您的||運算元周圍放置顯式括號,我認為這是您的意圖。
if (tgt.length() <= 3 && (tgt.charAt(0) == ':' || tgt.charAt(0) == ';'))
{
if (tgt.length() == 2 && (tgt.charAt(1) == ')' || tgt.charAt(1) == 'D'))
uj5u.com熱心網友回復:
這是一個情況下,運算子優先級(來源:oracle.com)不是我們作為開發商可能具有的期望匹配。-&&運算子的優先級高于||. 這意味著
tgt.length() <= 3 && tgt.charAt(0) == ':' || tgt.charAt(0) == ';'
評估為相同的值
(tgt.length() <= 3 && tgt.charAt(0) == ':') || tgt.charAt(0) == ';'
(注意周圍的括號(... && ...))
如果我們希望||首先計算 -operator,我們必須添加顯式括號:
tgt.length() <= 3 && (tgt.charAt(0) == ':' || tgt.charAt(0) == ';')
(注意周圍的括號(... || ...))
(同樣與第二個條件if)
Ideone demo
uj5u.com熱心網友回復:
問題似乎是您的第二個 if 設定不正確。
如果我理解正確,您想檢查第二個字母是“)”還是“D”,除非長度為兩個。
您要檢查的內容是長度 = 2 和第二個字母“)”還是第二個字母等于“D”
您可以通過將 if 更改為 if ((&& tgt.charAt(1) == ')'|| tgt.charAt(1) == 'D') && tgt.length() != 2) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/354741.html
