gpt4 book ai didi

java - 字符串方程错误检查器不工作

转载 作者:行者123 更新时间:2023-12-02 07:07:17 25 4
gpt4 key购买 nike

我有一个方法可以检查编写的方程式是否正确。

此方法检查:

  • 多个括号
  • 过多的运算符
  • 两位数
  • q
  • 以及字符串中不属于以下字符的任何字符:

.

private static final String operators = "-+/*%_";
private static final String operands = "0123456789x";

它工作正常,但后来我向运算符添加了模块化,现在每当我的代码到达方法中的部分时,都会检查操作数的左侧和右侧以查看它是否不是字符串的结尾或者一开始我收到一个错误,说

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3

我的方法及其所有附加方法。

private static final String operators = "-+/*%_";
private static final String operands = "0123456789x";

public Boolean errorChecker(String infixExpr)
{
char[] chars = infixExpr.toCharArray();
StringBuilder out = new StringBuilder();

for (int i = 0; i<chars.length; i++)
{
System.out.print(infixExpr.charAt(i));
if (isOperator(infixExpr.charAt(i)))
{
if (i == 0 || i == infixExpr.length())
{
out.append(infixExpr.charAt(i));
}
else if (isOperator(infixExpr.charAt(i + 1)) && isOperator(infixExpr.charAt(i - 1)))
{
System.out.println("To many Operators.");
return false;
}
else if (isOperator(infixExpr.charAt(i + 1)))
{
if (infixExpr.charAt(i) != '-' || infixExpr.charAt(i + 1) != '-')
{
System.out.println("To many Operators.");
return false;
}
}
else if (isOperator(infixExpr.charAt(i - 1)))
{
if (infixExpr.charAt(i) != '-' || infixExpr.charAt(i - 1) != '-')
{
System.out.println("To many Operators.");
return false;
}
}
}
else if (isOperand(infixExpr.charAt(i)))
{
if (i == 0 || i == infixExpr.length())
{
out.append(infixExpr.charAt(i));
}//THE LINE RIGHT BELOW THIS COMMENT THROWS THE ERROR!!!!!
else if (isOperand(infixExpr.charAt(i + 1)) || isOperand(infixExpr.charAt(i - 1)))
{
System.out.println("Double digits and Postfix form are not accepted.");
return false;
}
}
else if (infixExpr.charAt(i) == 'q')
{
System.out.println("Your meow is now false. Good-bye.");
System.exit(1);
}
else if(infixExpr.charAt(i) == '(' || infixExpr.charAt(i) == ')')
{
int p1 = 0;
int p2 = 0;
for (int p = 0; p<chars.length; p++)
{
if(infixExpr.charAt(p) == '(')
{
p1++;
}
if(infixExpr.charAt(p) == ')')
{
p2++;
}
}
if(p1 != p2)
{
System.out.println("To many parentheses.");
return false;
}
}
else
{
System.out.println("You have entered an invalid character.");
return false;
}
out.append(infixExpr.charAt(i));
}
return true;
}

private boolean isOperator(char val)
{
return operators.indexOf(val) >= 0;
}

private boolean isOperand(char val)
{
return operands.indexOf(val) >= 0;
}

运行该方法的主要部分:

    Boolean meow = true;
while(meow)
{
System.out.print("Enter infix expression: ");
infixExpr = scan.next();//THE LINE RIGHT BELOW THIS COMMENT THROWS THE ERROR!!!!!
if(makePostfix.errorChecker(infixExpr) == true)
{
System.out.println("Converted expressions: "
+ makePostfix.convert2Postfix(infixExpr));
meow = false;
}
}

以前工作正常,但现在它甚至无法通过之前工作的 1+2,而且我没有更改任何内容。怎么了!?!?

最佳答案

看起来发生的情况是您在代码中多次检查索引 (i + 1) 处的字符。假设您输入一个长度为五个字符的字符串。程序执行并到达以下行:

else if (isOperator(infixExpr.charAt(i + 1)) && isOperator(infixExpr.charAt(i - 1)))

如果 i == 4,这将导致代码:

infixExpr.charAt(i + 1)

抛出索引错误。本质上,您正在检查最大索引为四(长度为五个字符)的字符串中索引五(第六个字符)处的字符。另外,您的检查

if(i==0 || i == infixExpr.length)

无法按原样工作。也许检查 (i==infixExpr.length-1)。

关于java - 字符串方程错误检查器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com