带有charAt

时间:2017-11-26 10:36:47

标签: java bluej

作为一个学校项目,我被要求制作一个程序,显示你输入的名字的缩写(例如。对于Akshat Abhay Shetye,它会显示A. A. Shetye)。

这在我的学校PC上工作正常,它运行旧的bluej和Java但在运行时抛出错误(StringIndexOutOfBoundsException:String index超出范围)。 这是我的计划:

import java.util.*;
import java.lang.*;
public class dispInitials{
    public static void main (String args[]){
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your full name");
        String name = sc.next();
        //name = name.trim();
        String inName= name.charAt(0)+". ";
        int i = 1;
        for(i=1;i<(name.length()-1);i++){
            if(Character.isWhitespace(name.charAt(i)))
            break;
        }
        i++;
        inName=inName+name.charAt(i)+". ";
        for(i=i;i<name.length();i++){
            if(Character.isWhitespace(name.charAt(i)))
            break;
        }
        i++;
        System.out.println("The name is "+inName);
    }
}

任何人都可以解释错误(第16行)吗?

2 个答案:

答案 0 :(得分:4)

for(i=1;i<(name.length()-1);i++)

因此,当循环停止时,i等于name.length - 1

然后,你正在做

i++;
inName = inName+name.charAt(i)+". ";

所以你试图访问索引name.length的角色。但是没有这样的指数。最后一个有效索引是name.length - 1。因此例外。

您需要学习使用调试器并逐行逐步执行代码,并检查变量的值。或者至少在代码中添加System.out.println()指令来诊断您的问题。这基本上是开发人员的日常工作。

答案 1 :(得分:0)

错误在您的名字输入中。

使用以下代码替换输入行:

String name = sc.nextLine();