Java 在尝试交换二维数组中的元素时,应使用哪种类型的列表?

Java 在尝试交换二维数组中的元素时,应使用哪种类型的列表?,java,Java,这个程序的目的是“加密”一个关键字-关键字是用户输入-通过一次获取两个字母(来自关键字),在某些象限中定位这两个字母,并基本上用其他两个象限中的字母交换它们。我已经声明了一个名为matrix的二维数组。在这个数组中有四个不同的象限(5x5)——其中两个象限(左上角和右下角)以有序的方式包含字母A-Z(不包括J)。其他两个象限(右上角和左下角)以无序方式包含字母A-Z(同样,不包括J)。该程序基本上是为了接收关键字,并一次遍历两个字符。这是通过for循环完成的: for (bytegram = 0

这个程序的目的是“加密”一个关键字-关键字是用户输入-通过一次获取两个字母(来自关键字),在某些象限中定位这两个字母,并基本上用其他两个象限中的字母交换它们。我已经声明了一个名为
matrix
的二维数组。在这个数组中有四个不同的象限(5x5)——其中两个象限(左上角和右下角)以有序的方式包含字母A-Z(不包括J)。其他两个象限(右上角和左下角)以无序方式包含字母A-Z(同样,不包括J)。该程序基本上是为了接收关键字,并一次遍历两个字符。这是通过for循环完成的:

for (bytegram = 0; bytegram < length; bytegram += 2) {
            x = keyword1.toUpperCase().charAt(bytegram);
            y = keyword1.toUpperCase().charAt(bytegram + 1);
        }
“a”和“b”分别对应于左上象限和右下象限,“c”和“d”分别对应于右上象限和左下象限

我尝试了ArrayListlist=newarraylist()listlist=newarraylist()。无论我使用哪一个,我都会不断得到错误:

表达式的类型必须是数组类型,但解析为 ArrayList

以下是我迄今为止的代码:

import java.awt.List;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class FourSquareCipher {
    public static void main(String[] args) throws IOException {
        ArrayList<Character> list = new ArrayList<Character>();
        char[][] matrix = { 
                { 'A', 'B', 'C', 'D', 'E',  'Z', 'G', 'P', 'T', 'F' },
                { 'F', 'G', 'H', 'I', 'K',  'O', 'I', 'H', 'M', 'U' },
                { 'L', 'M', 'N', 'O', 'P',  'W', 'D', 'R', 'C', 'N' },
                { 'Q', 'R', 'S', 'T', 'U',  'Y', 'K', 'E', 'Q', 'A' },
                { 'V', 'W', 'X', 'Y', 'Z',  'X', 'V', 'S', 'B', 'L' },
                { 'M', 'F', 'N', 'B', 'D',  'A', 'B', 'C', 'D', 'E' },
                { 'C', 'R', 'H', 'S', 'A',  'F', 'G', 'H', 'I', 'K' },
                { 'X', 'Y', 'O', 'G', 'V',  'L', 'M', 'N', 'O', 'P' },
                { 'I', 'T', 'U', 'E', 'W',  'Q', 'R', 'S', 'T', 'U' },
                { 'L', 'Q', 'Z', 'K', 'P',  'V', 'W', 'X', 'Y', 'Z' } 
                };

        String fileName = "keywords.txt";
        String line = null;

        String keyword1;
        int length;
        int bytegram;
        int a, b, c, d;
        int i, j;
        int counter;
        char x = 0, y = 0;
        long startTime = System.currentTimeMillis();
        long startTimeSeconds = TimeUnit.MILLISECONDS.toSeconds(startTime);

        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        @SuppressWarnings("resource")
        Scanner keywordInput = new Scanner(System.in);

        System.out.println("Enter the first keyword: ");
        keyword1 = keywordInput.nextLine();
        length = keyword1.length();

        char[] words = keyword1.toUpperCase().toCharArray();

        for (char letter:words) {
            System.out.println(letter);
        }

        for (bytegram = 0; bytegram < length; bytegram += 2) {
            x = keyword1.toUpperCase().charAt(bytegram);
            y = keyword1.toUpperCase().charAt(bytegram + 1);
        }

        for (i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                if (matrix[i][j] == x && i < 5 && j < 5) {
                    a = i;
                    b = j;
                }
            }
        }

        for (i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                if (matrix[i][j] == y && i > 4 && j > 4) {
                    c = i;
                    d = j;
                }
            }
        }

        list[counter] = matrix[a][d];
        counter++;

        list[counter] = matrix[c][b];
        counter++;

        while ((line = bufferedReader.readLine()) != null) {
            char[] fileToChar = line.toUpperCase().toCharArray();

            for (char fileArray:fileToChar) {
                System.out.println(fileArray);
            }
        }

        System.out.println("Encryption time (s): " + ((System.currentTimeMillis() - startTimeSeconds) / 1000000000 / 1000));
        bufferedReader.close();
    }
}
导入java.awt.List;
导入java.io.*;
导入java.util.ArrayList;
导入java.util.Scanner;
导入java.util.concurrent.TimeUnit;
公共类四方密码{
公共静态void main(字符串[]args)引发IOException{
ArrayList=新建ArrayList();
字符[][]矩阵={
{'A','B','C','D','E','Z','G','P','T','F'},
{'F','G','H','I','K','O','I','H','M','U'},
{'L','M','N','O','P','W','D','R','C','N'},
{'Q','R','S','T','U','Y','K','E','Q','A'},
{'V','W','X','Y','Z','X','V','S','B','L'},
{'M','F','N','B','D','A','B','C','D','E'},
{'C','R','H','S','A','F','G','H','I','K'},
{'X','Y','O','G','V','L','M','N','O','P'},
{'I','T','U','E','W','Q','R','S','T','U'},
{'L','Q','Z','K','P','V','W','X','Y','Z'}
};
字符串fileName=“keywords.txt”;
字符串行=null;
字符串关键字1;
整数长度;
整数倍特格拉姆;
INTA、b、c、d;
int i,j;
整数计数器;
字符x=0,y=0;
long startTime=System.currentTimeMillis();
long startTimeSeconds=时间单位毫秒到秒(startTime);
FileReader FileReader=新的FileReader(文件名);
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
@抑制警告(“资源”)
扫描仪关键字输入=新扫描仪(System.in);
System.out.println(“输入第一个关键字:”);
keyword1=keywordInput.nextLine();
长度=关键字1.length();
char[]words=keyword1.toUpperCase().toCharArray();
for(字符:单词){
系统输出打印号(字母);
}
对于(bytegram=0;bytegram4&&j>4){
c=i;
d=j;
}
}
}
列表[计数器]=矩阵[a][d];
计数器++;
列表[计数器]=矩阵[c][b];
计数器++;
而((line=bufferedReader.readLine())!=null){
char[]fileToChar=line.toUpperCase().toCharArray();
for(char fileArray:fileToChar){
System.out.println(fileArray);
}
}
System.out.println(“加密时间:”+((System.currentTimeMillis()-startTimeSeconds)/100000000/1000);
bufferedReader.close();
}
}

是的,它将抛出一个错误,因为

列表:java.util.ArrayList不相等矩阵:char[]


如果需要随机访问,应使用
ArrayList
。并使用其
get()
方法代替数组语法。Ok。你能告诉我我该怎么解决这个问题吗?或者至少,给我指出正确的方向?而不是列表[counter]=矩阵[a][d];增加(矩阵[a][d]);也可以代替列表[counter]=矩阵[c][b];增加(矩阵[c][b]);投票给我的兄弟。
import java.awt.List;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class FourSquareCipher {
    public static void main(String[] args) throws IOException {
        ArrayList<Character> list = new ArrayList<Character>();
        char[][] matrix = { 
                { 'A', 'B', 'C', 'D', 'E',  'Z', 'G', 'P', 'T', 'F' },
                { 'F', 'G', 'H', 'I', 'K',  'O', 'I', 'H', 'M', 'U' },
                { 'L', 'M', 'N', 'O', 'P',  'W', 'D', 'R', 'C', 'N' },
                { 'Q', 'R', 'S', 'T', 'U',  'Y', 'K', 'E', 'Q', 'A' },
                { 'V', 'W', 'X', 'Y', 'Z',  'X', 'V', 'S', 'B', 'L' },
                { 'M', 'F', 'N', 'B', 'D',  'A', 'B', 'C', 'D', 'E' },
                { 'C', 'R', 'H', 'S', 'A',  'F', 'G', 'H', 'I', 'K' },
                { 'X', 'Y', 'O', 'G', 'V',  'L', 'M', 'N', 'O', 'P' },
                { 'I', 'T', 'U', 'E', 'W',  'Q', 'R', 'S', 'T', 'U' },
                { 'L', 'Q', 'Z', 'K', 'P',  'V', 'W', 'X', 'Y', 'Z' } 
                };

        String fileName = "keywords.txt";
        String line = null;

        String keyword1;
        int length;
        int bytegram;
        int a, b, c, d;
        int i, j;
        int counter;
        char x = 0, y = 0;
        long startTime = System.currentTimeMillis();
        long startTimeSeconds = TimeUnit.MILLISECONDS.toSeconds(startTime);

        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        @SuppressWarnings("resource")
        Scanner keywordInput = new Scanner(System.in);

        System.out.println("Enter the first keyword: ");
        keyword1 = keywordInput.nextLine();
        length = keyword1.length();

        char[] words = keyword1.toUpperCase().toCharArray();

        for (char letter:words) {
            System.out.println(letter);
        }

        for (bytegram = 0; bytegram < length; bytegram += 2) {
            x = keyword1.toUpperCase().charAt(bytegram);
            y = keyword1.toUpperCase().charAt(bytegram + 1);
        }

        for (i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                if (matrix[i][j] == x && i < 5 && j < 5) {
                    a = i;
                    b = j;
                }
            }
        }

        for (i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                if (matrix[i][j] == y && i > 4 && j > 4) {
                    c = i;
                    d = j;
                }
            }
        }

        list[counter] = matrix[a][d];
        counter++;

        list[counter] = matrix[c][b];
        counter++;

        while ((line = bufferedReader.readLine()) != null) {
            char[] fileToChar = line.toUpperCase().toCharArray();

            for (char fileArray:fileToChar) {
                System.out.println(fileArray);
            }
        }

        System.out.println("Encryption time (s): " + ((System.currentTimeMillis() - startTimeSeconds) / 1000000000 / 1000));
        bufferedReader.close();
    }
}