有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java编程异常

有人能帮我吗?我不理解这种例外情况:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
    at java.lang.String.charAt(Unknown Source)
    at charPerLine.main(charPerLine.java:13)

以下是负责的代码:

import java.util.*;
public class charPerLine {

    public static void main(String[] args)throws StringIndexOutOfBoundsException {
        Scanner sc=new Scanner(System.in);
        System.out.print("Type any name:");
        String s=sc.next();
        int j= s.length()+1;
        for(int i=0;i<=j;i++){
            System.out.println(s.charAt(i));
        }
    }
}

共 (6) 个答案

  1. # 1 楼答案

    啊。感谢格雷格发现了这个问题另一半的链接。他是对的,这不公平

    for循环从0到s的长度加1

    如果s是一个数组:

    ['a','b','c']
    

    然后从0到4。该数组的索引为0、1和2。所以,你试图到达终点之外的两点

    您想删除这一行:

    int j= s.length()+1;
    

    并将for循环更改为:

    for(int i = 0; i < s.length(); i++){
    
  2. # 2 楼答案

    循环应该是:

    for(int i=0; i < s.length(); i++){
      System.out.println(s.charAt(i));
    }
    

    字符串中的最后一个字符具有索引:

    s.length() - 1

    所以你需要使用防护装置:

    i < s.length()

    这样,循环在i变成s.length()之前终止

  3. # 3 楼答案

    您正在引用位置9处的字符,该位置超出了实际字符串的范围。记住检查它是否在[0,长度[]范围内

  4. # 4 楼答案

    您试图直接访问少于10个字符的字符串的第10个字符。比如:

    "12345".charAt(9)
    

    请记住,字符串索引是基于0的,因此.charAt(9)=>;第十个字符。所以"123".charAt(3)也会扔

  5. # 5 楼答案

    js.length()+1,然后i<=j。所以:s.charAt(i)最终将访问索引length()+1,这比允许的多2个

  6. # 6 楼答案

    表情

    s.charAt(i)
    

    如果i大于或等于s.length(),将抛出错误。尝试使用

    for (int i=0; i<s.length(); i++)
        // ...
    

    相反