字符串索引超出范围 解决方案?(爪哇)



运行此代码时出错。错误是线程"main"中的异常 java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围: -16.不知道如何解决,我已经尝试了多种解决方案。

import java.util.Scanner;
public class Card {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter your card: ");
        String number = input.next();
        if(addingDigit(number) % 10 == 0)
            System.out.println("Card is valid");
        else
            System.out.println("Card is invalid");

    }
    public static long addingDigit(String number){
        long even = 0;
        for(int i = 0, s = 2; i < number.length() - 1; i++, s *= 2){
            if(number.charAt(number.length() - s) >= '5'){
                if(number.charAt(number.length() - s) == '5')
                    even += 1;
                else if (number.charAt(number.length() - s) == '6')
                    even += 3;
                else if(number.charAt(number.length() - s) == '7')
                    even += 5;
                else if(number.charAt(number.length() - s) == '8')
                    even += 7;
                else if(number.charAt(number.length() - s) == '9')
                    even += 9;
            }
            else
                even += (number.charAt(number.length() - s) - 48);

        }
        long k = addOdd(number);
        long sumOfDigits = even + k;
        return sumOfDigits;

    }
    public static long addOdd(String number){
        long odd = 0;
        for (int i = 0, s = 1; i < number.length() - 1; i++, s += 2){
            odd += number.charAt(number.length() - s) - 48;
        }
        return odd;
    }
}

在尝试访问元素之前,请检查number.length() - s是否在范围内。

您的循环正在无限制地增加s值。因此,在某个循环值之后,s 的值将大于字符串的大小number .这就是您收到错误的原因。这是一种不好的做法。

最新更新