错误: 线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 在java.lang.String.charAt(未知来源) 在Convert.main(Convert.java:16)
public class Convert {
public static void main(String[] args) {
int i=0;
int j=0;
char p[] = new char[10]; // postfix
Stk s = new Stk(); // stack
String str = new String(); // infix
str = JOptionPane.showInputDialog("Please enter a infix expression:");
while( str.length() >= 1 )
{
if( operand (str.charAt(i)) )
p[j++] = str.charAt(i);
else if ( !operand(str.charAt(i)) )
{
while( !s.isEmpty() && precedence(str.charAt(i)) <= precedence(s.stack[s.top]) )
p[j++] = s.pop();
s.push( str.charAt(i) );
}
i++;
}
while ( !s.isEmpty() )
{
p[j++] = s.pop();
}
String P = new String(p);
JOptionPane.showMessageDialog( null , "Postfix expression is : " + P );
}
public static boolean operand( char b )
{
if ( b!='+' || b!='-' || b!='*' || b!='/' )
return true;
else
return false;
}
public static int precedence(char c)
{
int x=0;
switch(c)
{
case '*':
case '/':
x=2;
break;
case '+':
case '-':
x=1;
break;
}
return x;
}
}
答案 0 :(得分:0)
此声明导致问题:
while( str.length() >= 1 )
将其更改为:
while(i<str.length())
原因:您使用的while条件始终为true,如果用户输入5个字母的字符串,则str.length()为5,因此while条件while(5>=1)
始终为true,因此控制进入循环内部并且每次迭代i
从0,1,2,3,4增加到5.当i
为5时,抛出异常,因为字符串只有0,1,2,3,4字符..
编辑:
修复了operand
方法中的逻辑:
public static boolean operand(char b) {
if (b == '+' || b == '-' || b == '*' || b == '/')
return false;
else
return true;
}