繁体   English   中英

正在获取错误代码,但不知道为什么

[英]Getting error code, but don't know why

我需要为分数计算器编写代码,该计算器可以对两个分数进行加,减,乘和除。 我有此代码,并收到错误消息

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at Calculator.run(Calculator.java:24)
    at Calculator.main(Calculator.java:13)

我知道错误消息为我提供了需要修复的地方,但我无法弄清楚自己做错了什么。 我对Java还是很陌生,因此它可能很容易解决。

先感谢您。

    import java.util.*;

    public class Calculator {
    public static void main(String[] args) {
        System.out.println("Please enter two fractions to add, subtract, multiply, or divide\nor\nType 'quit' to exit the program.");
        Boolean on = true;
        Scanner console = new Scanner(System.in);
        while (on) {
            String input = console.nextLine();
            if (input.equalsIgnoreCase("quit")) {
                on = false;
            } else
                System.out.println(run(input));
        }
    }

    public static String run(String input) {
        int indexOfSecondSpace = 0;
        int indexOfOperation = 0;
        String firstNumber = "0";
        String secondNumber = "0";
        int beginning = input.indexOf(" ") + 1;
        int end = input.indexOf(" ", input.indexOf(" "));
        String operator = input.substring(beginning, end);
        if (input.contains("+") == true) {
            indexOfOperation = input.indexOf("+");
        } else if (operator.equals("-")) {
            indexOfOperation = input.indexOf("-");
        } else if (operator.equals("*")) {
            indexOfOperation = input.indexOf("*");
        } else if (operator.equals("/")) {
            indexOfOperation = input.indexOf("/");
        }
        firstNumber = (input.substring(input.indexOf(" ")));
        secondNumber = (input.substring(input.indexOf(" ") + 1));
        int a = 0;
        int b = 0;
        int c = 0;
        int d = 0;  
        if (firstNumber.contains("/")) {
            a = Integer.parseInt(firstNumber.substring(0,firstNumber.indexOf("/")));
            b = Integer.parseInt(firstNumber.substring(0),firstNumber.indexOf("/"));
        } else if (!firstNumber.contains("/"))
            a = Integer.parseInt(input.substring(0, input.indexOf(" ")));
            b = Integer.parseInt("1");
        {
            if (secondNumber.contains("/")) {
                c = Integer.parseInt(secondNumber.substring(secondNumber.indexOf("/")));
                d = Integer.parseInt(secondNumber.substring(secondNumber.indexOf("/" + 1, secondNumber.length())));
            } else if (!secondNumber.contains("/")) {
                c = Integer.parseInt(secondNumber.substring(secondNumber.length()));
                d = Integer.parseInt("1");
            }
        }
        return input;

    }
    public static String calculate(String input, int a, int b, int c, int d){
    if (input.contains ("+"))
    {
        System.out.println("your answer is " + (a*d + b*c)+"/" +(b*d));
    }
    else if  (input.contains("-"))
    {
        System.out.println("your answer is " + (a*d - b*c)+ "/" +(b*d));
    }
    else if (input.contains("/"))
    {
        System.out.println("your answer is " + (a*d)/(b*c)+ "/" +(b*d));
    }
    else if (input.contains("*"))
    {
        System.out.println("your answer is " + (a*c) +"/" +(b*d));
    }
    return input;
}
}

如果找不到该字符串,则String.indexOf方法将返回-1。 在此片段中,您有:

int beginning = input.indexOf(" ") + 1;
int end = input.indexOf(" ", input.indexOf(" "));

导致

int beginning = input.indexOf(" ") + 1; // = -1 + 1 = 0
int end = input.indexOf(" ", input.indexOf(" ")); // input.indexOf(" ", -1); ERROR!

您可能会提到:

int beginning = input.indexOf(" ") + 1; // = -1 + 1 = 0
int end = input.indexOf(" ", beginning ); // input.indexOf(" ", 0); Great job!

ug_的答案是正确的..顺便说一下,您的方法run()包含很多错误(我尝试运行它)

我认为固定的版本对您有用。.这是:(检查substring()方法;))

public static String run(String input) {
int indexOfSecondSpace = 0;
int indexOfOperation = 0;
String firstNumber = "0";
String secondNumber = "0";
int beginning = input.indexOf(" ") + 1;
int end = input.indexOf(" ", beginning);
String operator = input.substring(beginning, end);
if (input.contains("+") == true) {
    indexOfOperation = input.indexOf("+");
} else if (operator.equals("-")) {
    indexOfOperation = input.indexOf("-");
} else if (operator.equals("*")) {
    indexOfOperation = input.indexOf("*");
} else if (operator.equals("/")) {
    indexOfOperation = input.indexOf("/");
}
firstNumber = (input.substring(0, input.indexOf(" ")));
secondNumber = (input.substring(beginning + 1));
int a = 0;
int b = 0;
int c = 0;
int d = 0;  
if (firstNumber.contains("/")) {
    a = Integer.parseInt(firstNumber.substring(0,firstNumber.indexOf("/")));
    b = Integer.parseInt(firstNumber.substring(0,firstNumber.indexOf("/")));
} else if (!firstNumber.contains("/"))
    a = Integer.parseInt(input.substring(0, input.indexOf(" ")));
    b = Integer.parseInt("1");
{
    if (secondNumber.contains("/")) {
        c = Integer.parseInt(secondNumber.substring(secondNumber.indexOf("/")+1));
        d = Integer.parseInt(secondNumber.substring(secondNumber.indexOf("/")+1));
    } else if (!secondNumber.contains("/")) {
        c = Integer.parseInt(secondNumber.substring(secondNumber.length()));
        d = Integer.parseInt("1");
    }
}
return input;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM