“如何修复线程中的异常”;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0

“如何修复线程中的异常”;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0,java,Java,我正在制作温度转换器,遇到以下问题: 你想再做一次转换吗?(是/否) 你可以在这里查看完整的代码 看起来第一部分很好,但最后一部分是问题的根源 do{ do{//New coversion? System.out.println(); System.out.println("Would you like to make another conversion ? (Y/N)"); response = sc.nextLine().charAt(0); } whil

我正在制作温度转换器,遇到以下问题:

你想再做一次转换吗?(是/否)

你可以在这里查看完整的代码

看起来第一部分很好,但最后一部分是问题的根源

do{
  do{//New coversion?
    System.out.println();
    System.out.println("Would you like to make another conversion ? (Y/N)");

    response = sc.nextLine().charAt(0);
  } while (response != 'Y' & response != 'N'); // Filtering other awnsers than Y or N.

} while (response == 'Y');
我刚开始学习java,当我查看和检查我的书时,一切似乎都很好。
非常感谢您的帮助。=)

代码中的小更正将起作用。下一行而不是下一行,因为光标已在同一行中

do{
  do{//New coversion?
    System.out.println();
    System.out.println("Would you like to make another conversion ? (Y/N)");

    response = sc.next().charAt(0);
  } while (response != 'Y' & response != 'N'); // Filtering other awnsers than Y or N.

} whil
[更新]

发布的原始问题在回复中有下一行。尝试访问位置0处的字符时,将抛出超出范围的字符串索引

这里的问题是next()和nextLine()之间的区别

next()读取空格前的字符串。它在获得第一个空格后无法读取任何内容,而nextLine()读取整行内容

在本例中,由于使用了nextLine(),指针将尝试在下一行中的位置0处查找不存在的字符


因此,将此保留为next()将获得同一行中的内容

我敢肯定,在使用sc或sc.nextline之前,您需要先检查它。这些复合命令链可能会给您带来麻烦,除非您确定它们不会为null

我已尝试了您提供的链接中的代码。我无法解释为什么它使用
response=sc.nextLine().charAt(0)抛出该错误。但是,如果我使用
response=sc.next().charAt(0),工作正常。所以我的建议是使用
response=sc.next().charAt(0)。如果有人能解释为什么会出现这种情况,那么他们可以这样做。

@Robert这只是所提供示例的摘录,我在中进行了更改,并在此处发布了我的评论。为什么您认为将答案分为两个不相关的站点是有帮助的?@Robert原始示例参考是,因此我检查了代码,查看问题所在,更正了代码,并发布了真正需要的内容(具体答案)。我不知道repl.it保留答案的时间有多长。显然,没有repl.it链接,您的答案是无用的。最好确保你的答案是独立的。您可以链接到repl.it,但不鼓励只链接答案,您的答案可能会被删除。@Robert我理解您的意思,我相应地更新了答案。最好是空检查没有帮助;如果某个东西是
null
,他会得到一个
NullPointerException
。是的,我也不明白,但非常感谢。
do{
  do{//New coversion?
    System.out.println();
    System.out.println("Would you like to make another conversion ? (Y/N)");

    response = sc.next().charAt(0);
  } while (response != 'Y' & response != 'N'); // Filtering other awnsers than Y or N.

} whil