0

私は暗号を作成していますが、何らかの理由で、テキストを入力した後にこれらのエラーが表示されます:

enter string to be encrypted: 
hello world
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
    at chipher.cipher.encrypt(cipher.java:21)
    at chipher.cipher.main(cipher.java:9)

これは私のコードです:

package chipher;
import java.util.Scanner;
public class cipher {
public static int x;
public static int y;
public static Scanner jon = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("enter string to be encrypted: ");
        encrypt(jon.nextLine());
        }


public static void encrypt(String tocipher){
    double lngth = tocipher.length();
    tocipher.toLowerCase();
    char[] mynamechars = tocipher.toCharArray();
    char[] alphabet = new char[]{'a', 'b', 'c', 'd' , 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
for(int i = 0; i<lngth;)
    for(int x = 0; x<26;){
        y = x + 1;
if(mynamechars[i] == alphabet[x]){
    mynamechars[i] = alphabet[y];
}
i++;
x++;
}
    String text = String.valueOf(mynamechars);
    System.out.println(text);
}
}

何が起こっているのかわからないし、Java を学んでいる最中なので、基本的なことかもしれません。

4

3 に答える 3

0

あなたがやっている

mynamechars[i]

最大 25 番目のインデックスで、入力した入力の長さはわずか 10 文字のようです

于 2013-07-18T23:59:30.303 に答える
0

2 つのエラーがあります。最初のものは、forループの書き方とインデントの欠如によるものです。

for (int i = 0; i < lngth;) {
    for (int x = 0; x < 26;) {
        y = x + 1;

        if (mynamechars[i] == alphabet[x]) {
            mynamechars[i] = alphabet[y];
        }

        i++;
        x++;
    }

    String text = String.valueOf(mynamechars);
    System.out.println(text);
}

iとともに内側のループをインクリメントしますx。そのループの外側でインクリメントする必要があります。

for (int i = 0; i < lngth; i++) {
    for (int x = 0; x < 26; x++) {
        y = x + 1;

        if (mynamechars[i] == alphabet[x]) {
            mynamechars[i] = alphabet[y];
        }
    }

    String text = String.valueOf(mynamechars);
    System.out.println(text);
}

次に、問題がありyます。

xから0まで25の範囲なので、からまでのy範囲になります。インデックスが(27番目の文字)の要素がないため、エラーが発生します。126alphabet26

そのケースを手動で確認する必要があります。

if (mynamechars[i] == alphabet[x]) {
    if (y == 26) {
        y = 0;
    }

    mynamechars[i] = alphabet[y];
}

または、完全に取り除きy、モジュロ演算子を使用して先頭にラップします。

if (mynamechars[i] == alphabet[x]) {
    mynamechars[i] = alphabet[(x + 1) % alphabet.length];
}
于 2013-07-19T00:01:31.877 に答える