このコードを実行中にエラーが発生しました。エラーは スレッド "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;
}
}
'charAt(...)'が 's'増加に対してどのように応答するかを考えてみましょう。 – KevinO
あなたは何として何をしようとしていますか?とにかく、charAt()を使用しているときに文字列の長さから文字列の長さを減算しないでください。 –
sを使用して文字列内の偶数インデックスを取得します。 – shadowg