gpt4 book ai didi

java - 无论我做什么,我的程序都会返回 StringIndexOutOfBounds 异常

转载 作者:行者123 更新时间:2023-12-01 10:40:42 24 4
gpt4 key购买 nike

import java.io.*;

public class runner{
//Translates from infix to postfix
//Evaluates the postfix expression

public static tokenlist xform(String input){
//operand get pushed automatically onto linked list
//operator we will see;
tokenlist postfix=new tokenlist();
stack stack=new stack();
int c=0;
while(input.substring(c,c) != null){
if(prec.isoper(input.substring(c,c))==false){
postfix.push(input.substring(c,c),false);
}else{
if(stack.inspect()==null){
stack.push(input.substring(c,c));
}else{
if(prec.inprec(input.substring(c,c))>prec.stackprec(stack.inspect())){
while(prec.inprec(input.substring(c,c))>prec.stackprec(stack.inspect())){
String s=stack.pop();
postfix.push(s,true);
}
}else{
stack.push(input.substring(c,c));
}
}
}
c++;
}
return postfix;
}

public static double eval(tokenlist postfix){
astack numbers=new astack();
Double ans=0.0;
numbers.push(Double.parseDouble(postfix.getTing()));
while(numbers.isEmpty() != true){
if(postfix.getFunc()== false){
numbers.push(Double.parseDouble(postfix.getTing()));
}else{
double c=0.0;
double a=numbers.pop();
double b=numbers.pop();
if(postfix.getTing()=="+"){
c=a+b;
numbers.push(c);
}
if(postfix.getTing()=="-"){
c=b-a;
numbers.push(c);
}
if(postfix.getTing()=="*"){
c=a*b;
numbers.push(c);
}
if(postfix.getTing()=="/"){
c=b/a;
numbers.push(c);
}
if(postfix.getTing()=="^"){
double store;
double rep=0.0;
while(rep<=a){
c=b*b;
store=c;
rep=rep+1.0;
}
numbers.push(c);
}
if(postfix.getTing()=="\\"){
c=Math.abs(b-a);
numbers.push(c);
}
}
ans=numbers.pop();
}
return ans;
}

public static void main(String[] args){
try{
tokenlist postfix=xform(args[0]);
postfix.printlist();
double d=eval(postfix);
System.out.println(d);
}catch(Exception e){System.out.print(e);}
}

}

无论主程序中的 args[#] 中的数字是什么,我都会不断收到上述异常和字符串索引超出范围:无论主程序中的 args[#] 中的数字是什么。我已经 checkin 了 xform,它以字符串形式接收输入,并且子字符串从 0 开始。但它仍然不起作用。如果有人能提供解释或提示,他们将不胜感激。

最佳答案

您的代码包含行 while(input.substring(c,c) != null)
这基本上是一个无限循环,直到 c大于导致异常的字符串长度。
尝试将其更改为 while(c < input.length())你应该可以走了。

此外,我希望您知道 substring(c,c)将始终返回空字符串。
如果您想要单个字符,请使用 .charAt(c).substring(c, c+1)

关于java - 无论我做什么,我的程序都会返回 StringIndexOutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425656/

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