こんにちは、私は StringBuffer と StringBuilder をいじっていました。これは、その仕組みを理解するために書いた小さなプログラムです。ただし、Stringbuffer に関連するものではなく、for ループ内のマルチ if else if ステートメントに関連する奇妙なことが起こりました。
私の小さなコード:
public class c
{
public static void main(String args[])
{
StringBuffer infixB = new StringBuffer();
String infix = "3/8";
for(int i = 0; i < infix.length(); i++)
{
infixB.append(infix.charAt(i));
}
infixB.append(')');
System.out.println("Your current infix expression: "+infixB.toString());
//go through the 'infixB' 1 position at a time
for(int i = 0; i < infixB.length(); i++)
{
if(infixB.charAt(i) == '3')
{
System.out.println("Digit 3 at: " +i);
}
else if(infixB.charAt(i) == '/')
{
System.out.println("Operator at: "+i);
}
else if(infixB.charAt(i) == '8')
{
System.out.println("Digit 8 at: "+i);
}
else if(infixB.charAt(i) == ')');
{
System.out.println(") found at: " +i);
}
}
}
}
予想される出力は次のようになります。
Your current infix expression: 3/8)
Digit 3 at: 0
Operator at: 1
Digit 8 at: 2
) found at: 3
ただし、世界は完全に丸いわけではないため、出力は次のようになりました。
Your current infix expression: 3/8)
Digit 3 at: 0
) found at: 0
Operator at: 1
) found at: 1
Digit 8 at: 2
) found at: 2
) found at: 3
ご覧のとおり、何らかの理由で for ループ内の最後の else if ステートメントは、前の if または else if ステートメントが既に実行された後でも実行されていました。