繁体   English   中英

在 Java 中填充多维数组

[英]Populating Multidimensional Arrays in Java

所以我试图用两个字符串填充一个二维数组,如下所示。

但是,当我去编译我的代码时,我得到一个

“java:不兼容的类型:char[] 无法转换为 char”

错误。 我究竟做错了什么?

public static void main(String[] args) {
    String alphabet = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    String iAlphabet = ("ZYXWVUTSRQPONMLKJIHGFEDCBA");
    char alphabetArray [][] = {{alphabet.toCharArray()},{iAlphabet.toCharArray()}};
    System.out.print(alphabetArray[4][4]);
}

}

(Java 新手,我只是用头撞墙)

我想您希望能够将字符从一个字符串转换为同一位置的另一个字符串:

public static void main(String[] args) {
   String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   String iAlphabet = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
   char alphabetArray [][] = {alphabet.toCharArray(),iAlphabet.toCharArray()};

   System.out.print("3rd character: " + alphabetArray[0][2] + " -> " + alphabetArray[1][2]);
}

这打印:

3rd character: C -> X

使用翻译的一个例子是:

public static void main(String[] args) {
   String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   String iAlphabet = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
   char alphabetArray [][] = {alphabet.toCharArray(),iAlphabet.toCharArray()};

   String test = "HELLO WORLD";
   StringBuffer translated = new StringBuffer();
   for (int i = 0; i < test.length(); i++) {
       int index = alphabet.indexOf(test.charAt(i));
       if (index > 0) {
           translated.append(alphabetArray[1][index]);
       } else {
           translated.append(test.charAt(i));
       }
   }
   System.out.println("original sentence: " + test);
   System.out.println("translated sentence: " + translated.toString());
}

打印:

original sentence: HELLO WORLD
translated sentence: SVOOL DLIOW

如下所示声明数组。 记住它不是一个 26 x 26 的数组。 它是一个 2 x 26 的数组。

  String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  String iAlphabet = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
  char alphabetArray [][] = {alphabet.toCharArray(),iAlphabet.toCharArray()};

从第二个打印 V。

System.out.print(alphabetArray[1][4]);

从第一个打印 E。

System.out.print(alphabetArray[0][4]);

您正在放置一个char数组,您需要放置唯一的char 所以去掉花括号,简单地放一个char数组

你的代码应该是这样的

public static void main(String[] args) {
        String alphabet = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        String iAlphabet = ("ZYXWVUTSRQPONMLKJIHGFEDCBA");
        char[] charArray = alphabet.toCharArray();
        char[] charArray2 = iAlphabet.toCharArray();
        char alphabetArray[][] = { charArray, charArray2 };
        System.out.println(alphabetArray[0][23]);
    }

您还可以利用字母“A”-“Z”按顺序排列的事实

例如:如果你想把一个数字翻译成字母表中的一个字母,你可以说

char a = 'A';
a+=num;

或者如果你想让它倒退

char a = 'Z';
a-=num;

num 是您给出的等效索引。

这是假设您当然想让数组只读,并且建议在执行这些操作之前进行某种验证。 (验证数字是否为正数且小于 26)如果这适用于您的情况,那就太好了。

如果你想做一个 secer 密码:IE 将任何字符转换为任何偏移量,你可以执行以下操作:

private static char offsetChar(char chr, int offset){
    chr = Character.toUpperCase(chr);
    //value from 0-25 representing letter
    int val = chr - 'A';
    //make sure that the offset doesn't make it overflow past 26
    val = (val + offset) % 26;
    // convert back to letter from number 0-25
    return (char)('A' + val);
}

另请注意,这将自动将字母大写,如果您不希望发生这种情况,您可以测试它是否为大写,并在最后使用Character.isUpperCaseCharacter.toUpperCaseCharacter.toLowerCase以正确的状态返回

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM