Java 多If-else If语句
您好,我在玩StringBuffer和StringBuilder,这是我写的一个小程序,帮助我理解它是如何工作的。然而,出现了一些奇怪的事情,与Stringbuffer无关,而是与for循环中的multi-if-else-if语句有关 我的小代码:Java 多If-else If语句,java,if-statement,stringbuffer,Java,If Statement,Stringbuffer,您好,我在玩StringBuffer和StringBuilder,这是我写的一个小程序,帮助我理解它是如何工作的。然而,出现了一些奇怪的事情,与Stringbuffer无关,而是与for循环中的multi-if-else-if语句有关 我的小代码: public class c { public static void main(String args[]) { StringBuffer infixB = new StringBuffer(); String infix = "
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
) found at: 0
Operator at: 1
) found at: 1
Digit 8 at: 2
) found at: 2
) found at: 3
如您所见,由于某些原因,在for循环中,即使在上一个if或else if语句已经执行之后,最后一个else if语句仍在执行。最后一个条件的末尾有一个分号。Java将把分号视为条件的主体,并始终将大括号中的块作为不相关的块执行。改变
else if(infixB.charAt(i) == ')');
到
此代码没有if条件,因此每次都会显示for循环条件+1。我还建议您使用开关盒,因为您这次更快了
else if(infixB.charAt(i) == ')');
else if(infixB.charAt(i) == ')')
{
System.out.println(") found at: " +i);
}