如何将字符串输入与二维数组中的字符配对?

时间:2015-03-30 19:26:13

标签: java arrays string input multidimensional-array

当我运行下面的方法时,请记住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();

有谁在这里知道我会怎么做?我打算做一个转换声明或其他什么,但我不认为这会起作用,即使这样做也会很长很低效。

1 个答案:

答案 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'}

创建数组并使用括号中列出的元素填充它。

当然,您可以使用开关设置变量的值,然后返回该变量。