簡體   English   中英

線程“ main”中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:4

[英]Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 4

輸入Long 123456時出現此錯誤

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(Unknown Source)
at thuchanh01.Baitap05.sumDigits(Baitap05.java:17)
at thuchanh01.Baitap05.main(Baitap05.java:31)

我的代碼:(請注意,代碼仍然完整,我已經輸入了一些打印語句以進行檢查)

package thuchanh01;


import java.util.Scanner;

public class Baitap05 {
private static Scanner input;
public static int sumDigits(long n)
{
    String arrayN = Long.toString(n); //conver long to string
    int len = arrayN.length(); //length of string
    Character[] array = new Character[len]; //create char array with length = length string
    int sum = 0;

    for(int i = 0; i<=len; i++)
    {
        array[i] = new Character(arrayN.charAt(i)); //assign array[i] = arrayN[i]
        sum = sum + array[i]; //result sum
    }
    return sum;

}

public static void main (String[] args)
    {
        long dayso;
        long sum = 0;
        input = new Scanner(System.in);
        System.out.println("Nhap vao day so = ");
        dayso = input.nextLong();
        sum = sumDigits(dayso);
        System.out.println("Tong can tim = " + sum);


    }

}

數組的有效索引范圍是0len - 1 ,但是您的for循環嘗試使用等於len的索引。

for(int i = 0; i<=len; i++)

更改為

for(int i = 0; i<len; i++)

i等於len - 1的循環之后停止。

要對數字求和,您必須考慮以下事實,例如char '2'的數值不為2 Unicode(和ASCII)代碼是50 實際上,所有從'0''9'范圍是4857

從字符中減去char'0 '0'以獲取實際的數值,因為'2' - '0'2

sum = sum + array[i] - '0';

for循環應為:

for (int i = 0; i < len; i++) {

代替

for (int i = 0; i <= len; i++) {

字符從索引0開始,到索引arrayN.length() - 1

for(int i = 0; i<=len; i++)
{
        array[i] = new Character(arrayN.charAt(i)); //assign array[i] = arrayN[i]
        sum = sum + array[i]; //result sum
}

更改為i <len

暫無
暫無

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

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