当我运行下面的方法时,请记住ADFGVX将在显示时打印到数组的左侧和顶部,就像经典的ADFGVX密码一样。
static char [][] poly = new char[][]{
{'p','h','0','q','g','6'},
{'4','m','e','a','1','y'},
{'l','2','n','o','f','d'},
{'x','k','r','3','c','v'},
{'s','5','z','w','7','b'},
{'j','9','u','t','i','8'}};
我编写了一个方法,使用2d数组显示一个polybius方块(数组可以在上面看到),我想要做的是配对用户输入的方块,所以如果用户键入OBJECT我想要它返回FG VX XA DF GV XG。
Scanner console = new Scanner (System.in);
String phrase;
displayGrid();
System.out.println("");
System.out.print("Please enter a phrase you want to use\n");
phrase = console.nextLine();
console.close();
有谁在这里知道我会怎么做?我打算做一个转换声明或其他什么,但我不认为这会起作用,即使这样做也会很长很低效。
答案 0 :(得分:0)
您可以迭代数组以获取您要查找的字符的位置,然后将此位置解码为该字母。
public static String[] cypherADFGVX(String phrase){
String[] output=new String[phrase.length()];
for (int i = 0; i < phrase.length(); i++) {
//optional for breaking
//squareIteration:
for (int j = 0; j < 6; j++) {
for (int k = 0; k < 6; k++) {
if(poly[j][k]==phrase.charAt(i)){
output[i]=new String(new char[]{switchChar(j),switchChar(k)});
//To stop the iteration over poly and take care of the next char
//break squareIteration;
}
}
}
}
return output;
}
public static char switchChar(int integer){
switch (integer) {
case 0:
return 'A';
case 1:
return 'D';
//and so on
}
}
如果我留下任何问题,请问。
回答您的问题
喔。我知道了。我让它对Java初学者来说有点太复杂了。 只有一个String的简单解决方案是:
public static String cypherADFGVX(String phrase){
String output=new String[phrase.length()];
for (int i = 0; i < phrase.length(); i++) {
//optional for breaking
//squareIteration:
for (int j = 0; j < 6; j++) {
for (int k = 0; k < 6; k++) {
if(poly[j][k]==phrase.charAt(i)){
output=output+switchChar(j)+switchChar(k)+" ";
//To stop the iteration over poly and take care of the next char
//break squareIteration;
}
}
}
}
return output;
}
现在让我解释一下我的行。
String[] output=new String[phrase.length()];
创建一个新的字符串数组,其中每个字符串都是两个大写字母。 它看起来像[“FG”,“VX”,......]。在我看来,进一步处理更容易。
if(poly[j][k]==phrase.charAt(i))
将方块中位置jk处的字符与输入字符串的第i个字符进行比较。
output[i]=new String(new char[]{switchChar(j),switchChar(k)});
我使用String构造函数将char数组作为参数。
new char[]{'a','b'}
创建数组并使用括号中列出的元素填充它。
当然,您可以使用开关设置变量的值,然后返回该变量。