2017-10-25 20 views
0

두 개의 4 자리 숫자를 뒤집는 프로그램을 작성 중이며이를 수행 할 방법을 작성했습니다. 프로젝트 빌드에는 오류가 없지만 실행하려고하면 "String index out of range : -3"이됩니다. 나는 프로그래밍에 익숙하지 않고 무엇을 잘못했는지 전혀 모른다. 라인에서하위 문자열로 인해 문자열 인덱스가 범위를 벗어났습니다.

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; 
    } 
} 

답변

1

: 당신은 존재하지 않는 위치에 액세스하려고

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

여기에 코드입니다. Java의 배열은 "- 1"까지 시작됩니다.
시작 인덱스가 포함되며 끝 인덱스는 부분 문자열 메서드에서만 사용할 수 있습니다.

stringReverse에 대한 올바른 버전이 될 수 있습니다 :

또한
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; 
} 

,이 답변을 읽어보세요 : Java: substring index range

0

아마도 자바에서 문자열을 반대하는 더 우아한 방법이 있습니다. Java에서 쉬운 대안을 원한다면 클래스 java.lang.StringBuilder을보십시오.

설명서를 확인하고 reverse 방법을 찾으십시오.