Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我一直得到java.lang.StringIndexOutOfBoundsException_Java - Fatal编程技术网

我一直得到java.lang.StringIndexOutOfBoundsException

我一直得到java.lang.StringIndexOutOfBoundsException,java,Java,我试图让用户插入至少3个字符的字符串,如果是偶数,程序将打印前半部分,如果是奇数,程序将打印中间的3个字符。当我输入超过3个字符时,我一直收到这个错误 import java.util.Scanner; public class Stringex { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Please enter a string a

我试图让用户插入至少3个字符的字符串,如果是偶数,程序将打印前半部分,如果是奇数,程序将打印中间的3个字符。当我输入超过3个字符时,我一直收到这个错误

import java.util.Scanner;

public class Stringex {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.print("Please enter a string at least 3 characters long ");
String a = input.nextLine();


int numberofletters = a.length();

if (numberofletters < 3) {
    System.out.print("Sorry the string you entered is not long enough");
}
else if (numberofletters%2 == 0) {
    System.out.print(a.substring(0, numberofletters/2));
}
else {
    System.out.print(a.substring(numberofletters/2 - 1, numberofletters +2 ));
}


}
import java.util.Scanner;
公共级Stringex{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.print(“请输入至少3个字符长的字符串”);
字符串a=input.nextLine();
int numberofletters=a.length();
如果(字母数<3){
System.out.print(“对不起,您输入的字符串不够长”);
}
else if(numberofletters%2==0){
系统输出打印(a.子字符串(0,numberofletters/2));
}
否则{
系统输出打印(a.子字符串(numberofletters/2-1,numberofletters+2));
}
}

}

如评论中所述,您的问题在于此声明:

else {
    System.out.print(a.substring(numberofletters/2 - 1, numberofletters +2 ));
}
查看文档,您可以看到问题在于您传递的endIndex。由于
numberofletters
指的是字符串的长度,因此向其中添加2将始终索引到字符串的末尾

该文档还帮助说明了子字符串可以抛出哪些异常以及在什么情况下:

抛出: IndexOutOfBoundsException-如果beginIndex为负值,或者endIndex大于此字符串对象的长度,或者beginIndex大于endIndex


[Emphasis mine]

如评论中所述,您的问题在于此声明:

else {
    System.out.print(a.substring(numberofletters/2 - 1, numberofletters +2 ));
}
查看文档,您可以看到问题在于您传递的endIndex。由于
numberofletters
指的是字符串的长度,因此向其中添加2将始终索引到字符串的末尾

该文档还帮助说明了子字符串可以抛出哪些异常以及在什么情况下:

抛出: IndexOutOfBoundsException-如果beginIndex为负值,或者endIndex大于此字符串对象的长度,或者beginIndex大于endIndex


[Emphasis mine]

最后一个else语句就是导致问题的语句。您可能需要查看“numberofletters+2”部分。下次请添加完整的错误描述。特别是抛出它的那一行会有帮助,谢谢:)最后一个else语句就是导致问题的语句。您可能需要查看“numberofletters+2”部分。下次请添加完整的错误描述。特别是它被抛出的那一行会很有帮助,谢谢:)