我正在编写一个名为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);
我不知道为什么我出错了。其他人可以搞清楚吗?
如果某些事情不清楚,或者我没有提供足够的信息,请说出来。
非常感谢。
答案 0 :(得分:1)
试试String frac = scan.nextLine();
我认为next()
在空格之后不会得到任何东西。
答案 1 :(得分:1)
扫描仪使用分隔符模式将其输入分解为标记, 默认情况下匹配空格。
这意味着这不起作用,因为在输入2 / 3
时,frac
只包含文字"2"
:
String frac = scan.next();
//This finds the slash separating the numerator from the denominator
int slashLocate = frac.indexOf("/");