これは私の最初の質問です。何か改善していれば(投稿とコーディングスタイル)、私は知ってうれしいです。カスタム暗号化暗号化/復号化ストリーム
私はコーディングが非常に効率的であることを知っていますので、喜んでアドバイスと改善を行います。
現在、String
の暗号化と復号化を行うAtbashCipher
プログラムを作成しています。大学のすべてのタスクと同様に、私たちが従う必要があるいくつかのガイドラインがありますが、私は現在のコードをまず説明します:
import java.util.Scanner;
public class AtbashCipher {
StringBuilder code = new StringBuilder("");
String inputString;
String coded;
public String getInputString() {
return this.inputString;
}
public void setInputString(String inputString) {
this.inputString = inputString;
}
public String getCoded() {
return this.coded;
}
public void setCoded(String coded) {
this.coded = coded;
}
public char encode(char c) {
String alphabet = "abcdefghijklmnopqrstuvwxyz";
char help = Character.toLowerCase(c);
if (alphabet.indexOf(help) >= 0) {
for (int i = 0; i < alphabet.length(); i++) {
if (help == alphabet.toLowerCase().charAt(i)) {
c = alphabet.charAt(26 - i - 1);
code.append(c);
}
}
} else {
code.append(c);
}
if (inputString.length() == code.length()) {
System.out.println("Encode: " + code);
coded = code.toString();
inputString = coded;
code.setLength(0);
}
return c;
}
public char decode(char c) {
String alphabet = "abcdefghijklmnopqrstuvwxyz";
char help = Character.toLowerCase(c);
if (alphabet.indexOf(help) >= 0) {
for (int i = 0; i < alphabet.length(); i++) {
if (help == alphabet.toLowerCase().charAt(i)) {
c = alphabet.charAt(26 - i - 1);
code.append(c);
}
}
} else {
code.append(c);
}
if (inputString.length() == code.length()) {
coded = code.toString();
inputString = coded;
System.out.println("Decode: " + code);
code.setLength(0);
}
return c;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
AtbashCipher atb = new AtbashCipher();
System.out.print("To be translated: ");
atb.setInputString(sc.nextLine());
sc.close();
for (int j = 0; j < atb.getInputString().length(); j++) {
char help = atb.getInputString().charAt(j);
atb.encode(help);
}
for (int k = 0; k < atb.getInputString().length(); k++) {
char help = atb.getInputString().charAt(k);
atb.decode(help);
}
}
}
このコードはまだスキャナ-入力と交換する必要がありますが、それは問題ではないされてinputStringからの、暗号化および復号化します。 私のコードでは基本的に同じであるメソッドのデコードとエンコードを行う必要がありますが、それをどうにか分割する必要があります。私は何か間違っているのですか? は(編集を参照してください、はい、私が何か間違ったことをしました。)
問題は、タスクを開始します。私たちは、java.io.Writer
を実装し、その次は、コンストラクタは、これらの引数を取得する必要がクラスAtbashWriter
を記述する必要が :
public AtbashWriter(Writer base, AtbashCipher cipher)
また、Javaによって与えられたwrite
,flush
およびのメソッドを上書きする必要があります。
public void write(char[] cbuf, int off, int len)
public void flush()
public void close()
Reader
についても同じことを行う必要があります。
私は実際に自分自身のStream
を作成し、それを自分のコードに実装するこのコンセプトの背後にいるのを苦労しています。
あなたはそのことがどのように機能し、私のコードがより効率的になるのかを教えてください。エラーなど?
私はライブラリのコンセプトを理解するのにいくつかの困難がありますので、私はいつもいくつかの例を調べます。
このタスクは大学からのものですが、私はこれに任意の成績を取得していない、私はちょうどそれを行い、試験のために練習したい。
すべての援助をいただきありがとうございます。 ありがとうございました:)
編集:私の投稿の最初の行は編集できませんので、...ねえ。 Edit2:私のメソッドが完全に機能していないことがわかりました。それらを修正しようとします。 Edit3:私は今作家を投稿しようとすると、プログラムを編集しました。
Edit4は:後期、まだ忘れていない:私はそれを終え、ここにこれを追加し、問題が解決さ:)
private Reader base;
private AtbashCipher cipher;
public AtbashReader(Reader base, AtbashCipher cipher) {
this.base = base;
this.cipher = cipher;
}
public int read (char[] cbuf, int off, int len) throws IOException{
int result= base.read(cbuf, off, len);
for(int i = off; i < (off+len); i++){
cbuf[i] = cipher.decode(cbuf[i]);
}
return result;
}
public void close()throws IOException {
base.close();
}
あなたの返事をお寄せいただきありがとうございます。私は現時点ではあまりにも疲れているため、明日それを調べますが、私のコードもかなり変更しました。 – mxOx2kL
あなたの類推によって、それがより明確になりました。そして今、私は問題に取り組む方法を知っています。 コンストラクタは文字列(?)のようなさまざまな値を含む暗号オブジェクトを受け取り、Writerはすべてをファイルまたはストリームに書き込んでいます。 私は何とか私の暗号と作家の違いを理解していません。作者が私のコード化された文字列を保持していないのですか?暗号は何をしていますか? ありがとうございます – mxOx2kL
私はあなたの答えを試しましたが、私はAtbashCipher "cipher"の背後にある理由を完全に理解していません。また、 char [] encodedChars = encode(cbuf、off、len); エンコード/デコードメソッドを変更する必要があるので、必要な引数を与えることができますか?私たちのエンコードメソッドは、(私が知る限り)charを受け取ることになっています。 ありがとうございました – mxOx2kL