2017-10-25 10 views
0

私は2つの4桁の数字を逆にするプログラムを書いており、それを行う方法を書いています。プロジェクトのビルドにエラーはありませんが、実行しようとすると "String index to 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の配列は、0〜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で簡単な代替を望むなら、クラスjava.lang.StringBuilderを見てください。

ドキュメントを確認し、reverseメソッドを探します。

関連する問題