作为一个学校项目,我被要求制作一个程序,显示你输入的名字的缩写(例如。对于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行)吗?
答案 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();