2017-10-25 3 views
0

Ich schreibe ein Programm, das 2 4-stellige Zahlen umkehrt, und ich schrieb eine Methode, die es tun wird. Es gibt keine Fehler im Projektaufbau, aber ich bekomme "String index out of range: -3", wenn ich versuche es auszuführen. Ich bin ziemlich neu im Programmieren und ich habe keine Ahnung, was ich falsch gemacht habe.Substring verursacht einen String-Index außerhalb des Bereichs Fehler

Hier ist der Code:

public static void main(String[] args) 
    { 
     int num1 = 1; 
     int num2 = 1; 

     Scanner console = new Scanner(System.in); 

     while (num1 <1000 || num1 > 9999) 
     { 
      System.out.println("Please enter a positive 4 digit number"); 
      num1 = console.nextInt(); 
     } 

     String numString1 = Integer.toString(num1); 

     while (num2 <1000 || num2 > 9999) 
     { 
      System.out.println("Please enter another positive 4 digit number"); 
      num2 = console.nextInt(); 
     } 

     String numString2 = Integer.toString(num2); 

     int numReverse1 = stringReverse(numString1); 

     int numReverse2 = stringReverse(numString2); 

     System.out.println(numReverse1 + numReverse2); 

     System.out.println("The product of your 2 reversed numbers is: " + (numReverse1 * numReverse2)); 

    } 

    public static int stringReverse (String numString) 
    { 
     String c1c2c3 = numString.substring(4); 
     String c2c3c4 = numString.substring(1); 

     String c1c2 = c1c2c3.substring(3); 
     String c3c4 = c2c3c4.substring(1); 

     String c1 = c1c2.substring(2); 
     String c2 = c1c2.substring(1); 
     String c3 = c3c4.substring(2); 
     String c4 = c3c4.substring(1); 

     String numStringReverse = c4 + c3 + c2 + c1; 

     int reversedString = Integer.parseInt(numStringReverse); 

     return reversedString; 
    } 
} 

Antwort

1

In der Zeile:

String c1c2c3 = numString.substring(4); 
String c1c2 = c1c2c3.substring(3); 

Sie versuchen, eine Position zuzugreifen, die nicht existiert. Arrays in Java werden von 0 bis "- 1" gestartet.
Start-Index ist inklusive, End-Index ist exklusiv in Teilstring-Methode.

Eine korrekte Version für stringReverse könnte dies sein:

public static int stringReverse (String numString) 
{ 
    String c1c2c3 = numString.substring(0,3); 
    String c2c3c4 = numString.substring(1,4); 

    String c1c2 = c1c2c3.substring(0,2); 
    String c3c4 = c2c3c4.substring(1,3); 

    String c1 = c1c2.substring(0,1); 
    String c2 = c1c2.substring(1,2); 
    String c3 = c3c4.substring(0,1); 
    String c4 = c3c4.substring(1,2); 

    String numStringReverse = c4 + c3 + c2 + c1; 

    int reversedString = Integer.parseInt(numStringReverse); 

    return reversedString; 
} 

Versuchen Sie auch, diese Antwort zu lesen: Java: substring index range

0

Es gibt vielleicht elegantere Möglichkeiten, um eine Zeichenfolge in Java umzukehren. Wenn Sie eine einfache Alternative in Java wollen, schauen Sie sich die Klasse java.lang.StringBuilder an.

Überprüfen Sie die Dokumentation und suchen Sie nach der reverse Methode.

Verwandte Themen