要求用户输入温度,然后输入数字,后跟摄氏度或华氏度的C或F。然后,程序将识别温度以及测量温度的单位-使用此数据可以告诉您“水”是固态,液态还是气态。
我尝试了以下
public static void main(String[] args) {
Scanner myScan = new Scanner(System.in);
System.out.print("Enter THE temp: ");
String ent = myScan.next();
int temp = Integer.parseInt(ent.substring(0,4));
//char type = ent.charAt();
//System.out.println(temp);
// System.out.println(type);
if (temp >= 100) {
System.out.println("The water is gaseous");
} else if (temp < 0) {
System.out.println("The water is solid");
} else {
System.out.println("the water is liquid");
}
}
当我将(0,4)放入temp子字符串中时,我会认为输出将是输入的前3个数字。相反,当我输入1 int或3时,出现错误“ java.lang.StringIndexOutOfBoundsException”。
答案 0 :(得分:5)
似乎正在搜索超出字符串范围的字符。 代替将字符串长度硬编码为4,请使用ent.length()。
int temp = Integer.parseInt(ent.substring(0,ent.length()-1));
如果最后一个字符是F,您可能还需要一个公式才能转换为摄氏度
substring(ent.length()-1).equalsIgnoreCase("F");
答案 1 :(得分:0)
如果考虑子字符串函数,它将所有字符从beginIndex到endIndex-1,所以在这里,如果输入“ 123something”,结果将是“ 123s”,因为索引3的char是's'。 / p>
另一方面,如果仅输入“ 12c”,则子字符串将引发错误,因为索引3处没有字符。
就个人而言,我会在这里使用正则表达式,因为温度可能是1、2或5个字符,这取决于您如何编写。
答案 2 :(得分:0)
首先,询问摄氏或华氏温度,然后向用户询问单位。 http://prntscr.com/phx15j
像这样输入温度-> 50℃是错误的。
答案 3 :(得分:-1)
s.substring(begin, end)
将返回一个字符串,其字符串从begin
到end - 1
。
如果要提取除最后一个字符以外的所有字符,可以使用
s.substring(0, s.length() - 1)
,只有最后一个字符可以使用
s.substring(s.length() - 1, s.length())
。
由于输入的字符串的长度小于java.lang.StringIndexOutOfBoundsException
(在您的情况下为1 <4和3 <4),您将得到end
。