簡體   English   中英

字符串索引超出范圍與charAt

[英]String Index Out of Bounds with charAt

作為一個學校項目,我被要求制作一個顯示您輸入名稱縮寫的程序( 例如,對於 Akshat Abhay Shetye,它將顯示AA Shetye)。

這在運行舊版bluej和Java的學校PC上運行良好,但是在運行它時拋出錯誤(StringIndexOutOfBoundsException:字符串索引超出范圍)。 這是我的程序:

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行)?

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()指令以診斷您的問題。 這基本上是開發人員的日常工作。

錯誤出在您的姓名輸入中。

用以下代碼替換輸入行:

String name = sc.nextLine();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM