嗨,我正在尝试制作一个程序,允许用户对String进行编码,解码和旋转。例如:
用户输入:" Caesar" 系统输出:" Fdhvdu"
用户可以决定要旋转多少字。该程序还没有完成,我只是为选项V做了一个方法:编码,想知道我是否认为合适?或者如果它以完全不同的方式工作!
public class CaesarsChiffre {
public static void main(String[] args) {
char benutzerBefehl;
String benutzerText;
int rotation=0;
System.out.println("Caesars Chiffre encode, decode, rotate.");
System.out.println("Waehlen Sie:");
System.out.println("V for encode");
System.out.println("E for decode");
System.out.println("B for rotation");
benutzerBefehl=V; //Input.readChar();
System.out.println("Enter text to encode:");
benutzerText=Input.readString();
System.out.println("which rotation do you want?");
rotation=Input.readInt();
switch (benutzerBefehl){
case V: System.out.println(": Encoded text: "+Caesar.encode(benutzerText,rotation));
break;
case E: (": Decoded text: "+Ceasar.decode(benutzerText,rotation));
break;
case B: // will be filled
break;
default:
System.out.println("Invalid option..");
}
public static String Caesar.encode(String original_text, int rot){
String []s= original_text.split(" ");
for(int i=0;i<s.length();i++){
Stringbuilder letter=new StringBuilder();
letter.append(s.[i]+rot);
}
return String;
}
}
}
答案 0 :(得分:0)
for(int i=0;i<s.length();i++){ Stringbuilder letter=new StringBuilder(); letter.append(s.[i]+rot); }
由于您使用循环的每次迭代创建(并忽略)Stringbuilder
对象,因此该循环不起作用。
BTW:letter
是变量的错误名称,因为它包含字(至少)不是一个字母...
答案 1 :(得分:0)
你需要阅读有关oop的内容,因为你把所有内容都放在一个方法中,这不是java方式。当您继续以这种方式编写代码时,您将遭受损失并浪费大量时间来尝试调试并了解正在发生的事情。在解决任务时,第一点是思考,编写代码是最后一点。首先我们需要分解任务。 Caesar cypher即将把句子中的每个字母从初始点移到新位置。因此,我们将创建课程信函并告诉这个Letter课程将自己转移到右侧或左侧。
public class Main {
public static void main(String[] args) {
String word = "Caesar";
String expected = "Fdhvdu";
String result = word.chars()
.mapToObj(character -> new Letter((char) character))
.map(letter -> letter.shiftRightTo(3))
.map(letter -> letter.toString())
.collect(Collectors.joining());
System.out.println(result.equals(expected));
System.out.println(result);
}
}
class Letter {
private final String alphabet = "abcdefghijklmnopqrstuvwxyz";
private final boolean isLowerCase;
private final char letter;
public Letter(char letter) {
this.isLowerCase = Character.isLowerCase(letter);
this.letter = Character.toLowerCase(letter);
}
Letter shiftRightTo(final int shift) {
int letterPosition = alphabet.indexOf(letter);
for (int i = 0; i < shift; i++) {
letterPosition++;
if (letterPosition == alphabet.length()) {
letterPosition = 0;
}
}
char shiftedLetter = alphabet.charAt(letterPosition);
return new Letter(isLowerCase ? shiftedLetter : Character.toUpperCase(shiftedLetter));
}
Letter shiftLeftTo(final int shift) {
int letterPosition = alphabet.indexOf(letter);
for (int i = 0; i < shift; i++) {
letterPosition--;
if (letterPosition == -1) {
letterPosition = alphabet.length() - 1;
}
}
char shiftedLetter = alphabet.charAt(letterPosition);
return new Letter(isLowerCase ? shiftedLetter : Character.toUpperCase(shiftedLetter));
}
public String toString() {
char result = isLowerCase ? letter : Character.toUpperCase(letter);
return Character.toString(result);
}
}
此代码有效,但需要重构才能删除代码重复。您可以进一步改进它以引入另一个调用Word并隐藏其后面的Letter类的类。