2013-05-09 17 views
8

私はjavaを使い慣れていて、まだ学習しているので、そのことを覚えておいてください。私は、ユーザーがキーワードを入力することができ、数字に変換して配列に入れるプログラムを作成しようとしています。私の問題は、配列intの繰り返しを維持する必要があります。Javaの配列を繰り返す

私のコードは次のとおりです。

String keyword=inputdata.nextLine(); 
int[] key = new int[keyword.length()]; 
for (int k = 0; k < keyword.length(); ++k) 
{ 
    if (keyword.charAt(k) >= 'a' && keyword.charAt(k) <= 'z') 
    { 
     key[k]= (int)keyword.charAt(k) - (int)'a'; 
    } 
} 

今、私はそれがoutofboundsエラーがスローkeyword.lengthより任意のkey[i]高い取得しようとした場合。私はそれが必要なのです。

だから、基本的には、keyword.length()あれば3、私はkey[2]はそうでkey[5]key[8]と同じであるかどうかを確認できるようにする必要がありました。

ありがとうございました!

+0

++ kですが、k + = keyword.length(); – Hydroid

+0

いくつかの要素をキーにして0にしておくことが意図的なのでしょうか? – hyde

答えて

4

まず、リファクタリングを少ししてコードを修正するのが最も簡単です。ローカル変数にkeyword.charAt(k)のすべての使用を抽出します。

// I assume you actually want a different upper bound? 
for (int k = 0; k < keyword.length(); ++k) 
{ 
    char c = keyword.charAt(k % keyword.length()); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c - 'a'; 
    } 
} 

あなたが実際にkeywordよりkeyを長くすると仮定しています - あなたはおそらくしたい:

for (int k = 0; k < keyword.length(); ++k) 
{ 
    char c = keyword.charAt(k); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c'a'; 
    } 
} 

その後、我々は%オペレータとの問題を解決することができますループの上限も変更してください。例:

int[] key = new int[1000]; // Or whatever 
for (int k = 0; k < key.length; ++k) 
{ 
    char c = keyword.charAt(k % keyword.length()); 
    if (c >= 'a' && c <= 'z') 
    { 
     key[k] = c - 'a'; 
    } 
} 
関連する問題