我正在设计分数计算器的初始部分

时间:2013-09-20 03:05:41

标签: java calculator

这个初始部分应该采用像1 1/2这样的混合分数并将其转换为3/2

我的内容如下,问题是当我运行它时会给我一个错误。说错误是

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

代码从下面开始:

import java.util.Scanner;

public class Calculator {

    public static void main(String[] args) {
        // prompt user for fraction string
        // receive and store in variable
        // convert to improper fraction
        //print

        System.out.println("Enter a fraction:"); //prompt for string
        Scanner input = new Scanner(System.in); //Receive

        String fractionAsString = input.next(); //store in variable

        int getSpace = fractionAsString.indexOf('_'); //should fine where java spaces for the initial entering of fractoin

        int getSlash = fractionAsString.indexOf('/'); //should find divisor (like in 1 1/2)

        String firstString= fractionAsString.substring(0, getSpace+1);//converting string to int

        String secondString=fractionAsString.substring(getSpace, getSlash);

        String thirdString=fractionAsString.substring(getSlash+1);

        int wholeNumber=Integer.parseInt(firstString);

        int numerator=Integer.parseInt(secondString);

        int denominator=Integer.parseInt(thirdString);

        int newResult=wholeNumber*denominator;

        int finalResult=numerator+newResult;

        System.out.println(finalResult+"/"+denominator);

        input.close();

    }

}

2 个答案:

答案 0 :(得分:0)

问题是input.next()。由于您需要用户输入的整个字符串,因此您应使用nextLine()而不是next()

原因:

next()将空格作为默认分隔符。

nextLine()将返回作为默认分隔符。

警告您的代码中还有其他问题。您可能希望打印变量以了解存储在其中的内容。

快乐学习!

答案 1 :(得分:0)

在您的代码中,next()将空格作为默认分隔符,使用nextLine()作为默认分隔符返回。顺便说一下,使用像下划线(_)这样的自定义运算符来表示整数而不是使用空格。并拆分字符串以获得整数,分子和分母。