2017-05-22 6 views
1

Fehler beim Ausführen dieses Codes. Fehler sind Ausnahme im Thread "Haupt" java.lang.StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs: -16. Nicht sicher, wie zu beheben, habe ich bereits mehrere Lösungen ausprobiert.Stringindex außerhalb des zulässigen Bereichs Lösung? (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

Denken Sie darüber nach, wie 'charAt (...)' im Angesicht des '' 'ansteigen wird. – KevinO

+1

Was versuchst du mit s zu tun? Wie auch immer, ziehen Sie nicht mehr als die Länge der Zeichenfolge von der Länge der Zeichenfolge ab, wenn Sie charAt() –

+0

mit s verwenden, um die geraden Indizes in der Zeichenfolge zu erhalten. – shadowg

Antwort

0

Überprüfen Sie, ob number.length() - s ist in Reichweite, bevor Sie versuchen, das Element zuzugreifen.

0

Ihre Schleife erhöhen Wert von s ohne Einschränkung. Also nach einigen Schleifen Wert von s wird größer sein als die Größe Ihrer Zeichenfolge number. Deshalb hast du den Fehler bekommen. Das ist eine schlechte Übung.

Verwandte Themen