OutOfBounds异常;与分数合作

时间:2014-06-17 15:40:22

标签: java trim indexoutofboundsexception fractions

我正在编写一个名为FractionScaler的程序,它使用Scanner从用户那里获取一小部分,然后对其进行操作。我写了一个处理所有计算的分数类。用户应该输入这样的分数:“2/3”或“43/65”等......这部分工作正常,问题是当整数之间有空格时:“3/4”或“2 / 5“etc ...出现”OutOfBoundsException:字符串索引超出范围:-1“。让我进一步解释。

    //This is the user inputted fraction.  i.e. "2/3" or "  3  / 4"

    String frac = scan.next();

    //This finds the slash separating the numerator from the denominator 

    int slashLocate = frac.indexOf("/");

    //These are new strings that separate the user inputted string into two parts on 
    //either side of the "/" sign

    String sNum = frac.substring(0,slashLocate); //This is from the beginning of string to the slash (exclusive)
    String sDenom = frac.substring(slashLocate+1,frac.length()); //from 1 after slash to end of string

    //This trims the white space off of either side of the integers
    sNum = sNum.trim();  //Numerator
    sDenom = sDenom.trim();  //Denominator

我认为应该留下的只是两个看起来像整数的字符串,现在我需要将这些字符串转换为实际的整数。

    //converts string "integer" into real int
    int num = Integer.parseInt(sNum); 
    int denom = Integer.parseInt(sDenom);

现在我有两个整数用于分子和分母,我可以将它们插入我写的分数类的构造函数中。

    Fraction fraction1 = new Fraction(num, denom);

我怀疑这是解决这个问题的最好方法,但这是我能想到的唯一方法。当用户输入的分数没有空格时,EX。 “2/3”或“5/6”,程序运行正常。 当用户输入有任何类型的空格时,EX。 “3/4”或“3/4”,显示以下错误:

线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1。

终端指向我的代码的第17行,即上面的这一行:

    String sNum = frac.substring(0,slashLocate);

我不知道为什么我出错了。其他人可以搞清楚吗?

如果某些事情不清楚,或者我没有提供足够的信息,请说出来。

非常感谢。

2 个答案:

答案 0 :(得分:1)

试试String frac = scan.nextLine(); 我认为next()在空格之后不会得到任何东西。

答案 1 :(得分:1)

来自documentation

  

扫描仪使用分隔符模式将其输入分解为标记,   默认情况下匹配空格。

这意味着这不起作用,因为在输入2 / 3时,frac只包含文字"2"

String frac = scan.next();

//This finds the slash separating the numerator from the denominator 
int slashLocate = frac.indexOf("/");