import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
/**
This class encrypts files using the Caesar cipher.
For decryption, use an encryptor whose key is the
negative of the encryption key.
*/
public class CaesarCipher
{
private String keyWordString;
private String removeDuplicates(String word){
for (int i = 0; i < word.length(); i++) {
if(!keyWordString.contains(String.valueOf(word.charAt(i)))) {
keyWordString += String.valueOf(word.charAt(i));
}
}
return(keyWordString);
}
/**
Constructs a cipher object with a given key word.
@param aKey the encryption key
*/
public CaesarCipher(String aKeyWord)
{
keyWordString = removeDuplicates(keyWordString);
keyWordString = aKeyWord;
//create the mapping string
//keyWordString = removeDuplicates(keyWordString);
int moreChar = 26 - keyWordString.length();
char ch = 'Z';
for(int j=0; j<moreChar; j++)
{
keyWordString += ch;
ch -= 1;
}
System.out.println("The mapping string is: " + keyWordString);
}
/**
Encrypts the contents of a stream.
@param in the input stream
@param out the output stream
*/
public void encryptStream(InputStream in, OutputStream out)
throws IOException
{
boolean done = false;
while (!done)
{
int next = in.read();
if (next == -1)
{
done = true;
}
else
{
//int encrypted = encrypt(next);
int encrypted = encryptWordKey(next);
System.out.println((char)next + " is encrypted to " + (char)encrypted);
out.write(encrypted);
}
}
}
/**
Encrypts a value.
@param b the value to encrypt (between 0 and 255)
@return the encrypted value
*/
public int encryptWordKey(int b)
{
int pos = b % 65;
return keyWordString.charAt(pos);
}
}
Wenn ich werde diesen Code ausführen es gibt mir ein Fehler Laufzeit, der sagt:So entfernen Sie doppelte Buchstaben aus einer Zeichenfolge? Caesar Cipher
Exception in thread "main" java.lang.NullPointerException
at CaesarCipher.removeDuplicates(CaesarCipher.java:15)
at CaesarCipher.<init>(CaesarCipher.java:29)
at CaesarEncryptor.main(CaesarEncryptor.java:29)
Sagen wir, ich geben JJJJJJJavvvvvaaaaaaa
und ich möchte es Java erhalten und geben Sie mir den verschlüsselten Code . Um von der anderen Frage, die bereits gestellt wurde, zu unterscheiden, brauche ich die removeDuplicates-Methode, die ausgeführt wird und die Ausgabe hat, um JavaZYWW ..... etc auszudrucken. Irgendwelche Hilfe oder Vorschläge? I help würde sehr geschätzt werden
Hinweis: Dieser Code ist ** perfekt ** für TDD und JUnit/Unittests. Sie möchten zuerst Testfälle schreiben, die genau angeben, was Sie erwarten, dass eine Methode "ausgegeben" wird; und dann schreiben Sie den Produktionscode, um diesen Testfall zu "implementieren". Damit können Sie sofort erkennen, wenn ein Code nicht wie erwartet funktioniert. und Sie sind nur einen Klick davon entfernt, einen Debugger für den fehlerhaften Testfall auszuführen. – GhostCat
Oh, ich habe es nicht bemerkt. Aber die Ausgabe sollte JavaZYXW ...... usw. sein, wenn es fertig ist. Ich habe versucht, den Debugger mit einer anderen Platzierung der removeDuplicates-Methode zu verwenden, aber es wurde übersprungen und nicht ausgeführt. – user3416645