gpt4 book ai didi

java - 线程中的异常 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: -3

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:02 24 4
gpt4 key购买 nike

我是 Java 新手,我知道还有更多类似这样的帖子,但以我目前对 Java 的有限了解,我无法将它们应用到我的代码中。我正在使用 eclipse.exe我希望这个程序能够在我输入表达式时使用运算符和各种括号,请帮助我哪里错了~(抱歉我的英语不好)
java.lang.StringIndexOutOfBoundsException 仍然有问题

package hww3;
import java.lang.Character.Subset;
import java.util.Scanner;

public class Demo {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
System.out.print("입력: ");
Calculator cal=new Calculator();

String susik=s.nextLine();

System.out.println(susik);
cal.process(susik);

}

}
class Calculator{

public void process(String susik) {
susik=susik.replaceAll(" ", "");
double result=calculate(susik);
System.out.println("="+result);
}


private double calculate(String susik) {

System.out.println(susik);

double reVal=0;

if(susik.indexOf("[")!=-1
||susik.indexOf("{")!=-1
||susik.indexOf("(")!=-1){



if(susik.indexOf("[")!=-1){
reVal=calculate(susik,"[","]");
}

if(susik.indexOf("{")!=-1){
reVal=calculate(susik,"{","}");
}

if(susik.indexOf("[")!=-1){
reVal=calculate(susik,"(",")");
}

}else{

if(susik.indexOf("+")!=-1){
reVal=add(getFirstTerm(susik,"+"),getSecondTerm(susik,"+"));
}else if(susik.indexOf("-")!=-1){
reVal=add(getFirstTerm(susik,"-"),getSecondTerm(susik,"-"));
}else if(susik.indexOf("*")!=-1){
reVal=add(getFirstTerm(susik,"*"),getSecondTerm(susik,"*"));
}else if(susik.indexOf("/")!=-1){
reVal=add(getFirstTerm(susik,"/"),getSecondTerm(susik,"/"));
}else{
//연산자가 없을 경우
reVal=Double.parseDouble(susik);
}
}
return reVal;
}

private double calculate(String susik, String frontbracket, String endbracket) {

String frontSusik="";

String bracketSusik="";

String endSusik="";

if(susik.indexOf(frontbracket)!=0){
frontSusik=susik.substring(0,susik.lastIndexOf(frontbracket));
}else if(susik.indexOf(endbracket)!=(susik.length()-1)){
endSusik=susik.substring(susik.lastIndexOf(endSusik));
}else
bracketSusik=susik.substring(susik.indexOf(frontbracket)+1,susik.lastIndexOf(endbracket));


return calculate(frontSusik+calculate(bracketSusik)+endSusik);
}

private double getSecondTerm(String susik,String operator){
return calculate(susik.substring(susik.indexOf(operator)+1));
}

private double getFirstTerm(String susik,String operator){
return calculate(0,susik.substring(susik.indexOf(operator)));
}
public double add(double a,double b){
return a+b;
}
public double subtract(double a,double b){
return a-b;
}
public double nultiply(double a,double b){
return a*b;
}
public double divide(double a,double b){
return a/b;
}

}

最佳答案

对于 getFirstTerm,您的子字符串操作不正确,您只传递了应该从 0 到运算符索引的起始索引。

试试这个。

    private double getFirstTerm(String susik,String operator){
return calculate(susik.substring(0,susik.indexOf(operator)));
}

关于java - 线程中的异常 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: -3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976579/

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