2017-10-02 9 views
0

キーワード暗号に関する質問に私が助けてもらえるかどうかは不思議でした。マイコードのキーワード暗号の暗号化キーの作成(Java)

次のコードは、キーワード暗号(「これは秘密のメッセージです」としましょう)が(「qabp bp k poynoq hoppkdo」)となった方法を示すキーです。したがって、キーはStringまたはchar配列です。私の先生は私たちにchar配列を使用させました。上記の場合、キーは{KEYWORDABCFGHIJLMNPQSTUVXZ}、基本アルファベットは{ABCDEFGHIJKLMNOPQRSTUVWXYZ}に対応するため、AKになり、Aになります。

しかし、私はキーを作成しようとすると、すぐに問題に戻ります。最初に表示されるループは、配列の最初の値のキーワードを完全に細かく追加します。ただし、これを残りの配列に追加した後(キーワードの文字を含まない、またはスキップするアルファベットの残りの部分)は、2番目のループでは機能していないようです。

私が間違っていることは正確にはわかりませんが、if文の1つ、またはループで使用するjavaキーワード(continue;)と関係していると思います。キーワードarrayを印刷すると、には、すでに単語に出現している文字ではなく、アルファベットの最後の7文字が除外されているように見えるので、KEYWORDです。

コードを修正したり、正しい軌道に乗ってくれたら、それは大変ありがたいことです。質問に質問がある場合は、下のコメントセクションでお気軽にお問い合わせください。/

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

public class Crytograph 
{ 
    private String in; 
    private String out; 
    //private int awayFrom; 
    private char [] keyword; 
    private String word; 
    public Crytograph(String input, String wordLY) // , int fromAway) 
    { 
     in = input.toLowerCase(); 
     out = ""; 
     awayFrom = fromAway; 
     word = wordLY; 
     keyword = new char[26]; 
     int counter = 97; 
     int counter1 = 0; 
     for (int x = 0; x < word.length(); x++) 
     { 
      keyword[x] = word.charAt(x); 
     } 
     for (int i = word.length(); i < 26; i++) 
     { 
      if ((char)(counter) == keyword[counter1]) 
      { 
       continue; 
      } 
      else 
      { 
       keyword[i] = (char)(counter); 
       //System.out.println(keyword[i]); 
      } 
      counter++; 
      counter1++; 
      if (counter1 == word.length()) 
      { 
       counter1 = 0; 
      } 
     } 
    } 
+0

ご質問がありましたら、下記のコメント欄にお尋ねください。ありがとうございました! – user7282043

+0

trueに評価された場合はこれを行いますか?内部(文字)(カウンター)を印刷してみてください。 – user7733611

+0

はい、trueと評価されます。 – user7282043

答えて

0

あなたはインデックスcounter1単一文字にそれぞれの新しい文字を比較しています。しかし、実際にそれをと比較する必要があります。の文字はwordです。一致するものが見つかったとしても、continue;は引き続きiをインクリメントします。つまり、最後に1つ以上の文字が表示されません。代わりにこれを試してみてください:

char c = 'a' - 1; 
for (int i = word.length(); i < 26; i++) { 
    // loop until we find a char not contained in `word` 
    while (word.contains(String.valueOf(++c))); 
    keyword[i] = c; 
} 
+0

私はあなたが何をしたいのか理解しています(変数の単語のすべての文字と比較しています)。なぜなら、このコードは私の問題やその問題を解決しないからです。前述のように、配列キーワードは{keywordabcfghijlmnpqstuvxz}に等しくなるはずですが、この解決策では配列は{keyword f l p s xz}に等しくなります。私はスペースの量を少し減らしたかもしれませんが、それは配列が今も同じであったことです。あなたが伝えようとしていたコードに小さな誤りがあったかもしれません。あなたの答えを編集したり、新しい解決法を提供してください。 – user7282043

+0

私はこの答えの元のバージョンで小さな間違いをしました。現在のスニペットを使用していることを確認してください。 – shmosel

+0

ああ、私はまた、おそらくコードでおそらく何かを実現しました。配列が{keyword de k o r w y}に等しくなりましたが、配列は{keywordabcfghijlmnpqstuvxz}でなければなりません。だから私はあなたがするつもりだと思う:(!(word.contains(String .calueOf(C++))) – user7282043