2016-04-25 9 views
0

「decrpytに数字を入力する」と尋ねられたときに-2を入力するとwhileループが終了し、その後result2(復号化された単語)が出力されます。代わりに-2がエラー を生成します。 'java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です。-2'復号化中のエラー

これをバイパスするにはどうすればよいですか? -2を入力すると

import java.util.Scanner; 

public class Decrypt { 

    public static void main(String[] args) { 

     Scanner sc; 
     int result, input2, num, end = -2; 
     String word, sourcetext, answer, encrypt = "1", decrypt="2"; 

     char input, result2; 
     sc = new Scanner(System.in); 

     System.out.println("please enter sourcetext"); 
     sourcetext = sc.nextLine(); 

     System.out.print("Would you like to 1: encrypt, or 2: decrypt?"); 
     answer = sc.next(); 

     System.out.println("please enter numbers to decrypt"); 
     while (answer.equals(decrypt)) { 

      num = sc.nextInt();     // number to decrypt 
      result2 = sourcetext.charAt(num);  // num decrypted 

      if (num <= end) {      // int end = -2 

       System.out.print(result2); 

      } 

     } 
    } 
} 
+0

だけ入力された番号は、NUM、行の前にゼロを下回っているかどうかをチェック '結果2 = sourcetext.charAt(NUM);'またはtry..catchを使用する –

+0

まだ例外がスローされています 'java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です-2' – Button

+0

文字列のインデックスとして-2がありません –

答えて

0

、-2インデックスが文字列内に存在しないためcharAtに例外がスローされることが通過しています。 if (num <= end)ブロックをwhileループの先頭に移動し、残りをelseブロックに配置する必要があります。このよう

if (num <= end){      
    System.out.print(result2); 
} else { 
    num = sc.nextInt();     // number to decrypt 
    result2 = sourcetext.charAt(num);  // num decrypted 
} 
+0

result2の値は何ですか? –

+0

その問題はnumであり、result2は初期化されず、if文でエラーが発生します。 Rakesh、result2は、ソーステキスト内の文字の位置を使用してユーザーが解読した数字を表示します。 – Button

+0

@Button次に、 'result2'に何らかのソートのデフォルト値を与えるか、ロジックを書き直す必要があります。要点は 'charAt'メソッドで負のインデックスを持つことができないということです。そのため、エラーが発生しました。これを知っているならば、これを避けるためにコードを再作成できるはずです。あなたのためにプログラムを書き直すつもりはありません。 – kunruh