2017-05-22 25 views
1

このコードを実行中にエラーが発生しました。エラーは スレッド "main"の例外java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です:-16。 修正方法がわかりません。複数のソリューションを試しました。文字列インデックスが範囲外です解決策? (java)

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; 

    } 
} 
+0

'charAt(...)'が 's'増加に対してどのように応答するかを考えてみましょう。 – KevinO

+1

あなたは何として何をしようとしていますか?とにかく、charAt()を使用しているときに文字列の長さから文字列の長さを減算しないでください。 –

+0

sを使用して文字列内の偶数インデックスを取得します。 – shadowg

答えて

0

要素にアクセスする前に、number.length() - sが範囲内にあるかどうかを確認してください。

0

あなたのループは、制限なしでsの値が増加しています。したがって、ループの値がsの場合は、文字列のサイズがnumberより大きくなります。だからこそあなたは誤りを抱えています。これは悪い習慣です。

関連する問題