gpt4 book ai didi

java - 尝试交换二维数组中的元素时,应该使用什么类型的列表?

转载 作者:行者123 更新时间:2023-11-30 06:16:46 26 4
gpt4 key购买 nike

该程序的目的是“加密”关键字 - 关键字是用户输入 - 通过一次获取两个字母(来自关键字),将这两个字母定位在某些象限中,并实质上将它们与来自关键字的字母交换另外两个象限。我声明了一个名为matrix 的二维数组。该数组中有四个不同的象限 (5 x 5) - 其中两个象限(左上和右下)按顺序包含字母 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);
}

完成此操作后,它将在左上和右下象限中找到相应的字母,然后将它们与右上和左下象限中的相应字母交换。例如,假设用户输入关键字“than”。它将首先处理 "th" 因为它一次遍历关键字两个字符。它将在左上象限中找到字母“t”,并在右下象限。要加密这两个字母,本质上会交换 "t""h" 所在的列并转到同一行,但这次在右上象限和左下象限,如下所示:

Encryption example

两个顶部象限彼此对应,两个底部象限彼此对应。按照这种逻辑,输出(加密)将是“ES”,正如您从图片中看到的那样。

我在打印关键字的加密时遇到问题。该程序能够接收关键字,使用字符数组将其拆分为字符,并一次迭代两个字符(使用上面的 for 循环)。在该 for 循环下面,还有另外两个 for 循环,它们处理交换字母的逻辑。目前,我不知道要使用什么类型的列表:

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

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

“a”“b”对应于左上角和右下象限,并且< strong>“c”“d”分别对应于右上象限和左下象限。

我尝试过ArrayList list = new ArrayList () List list = new ArrayList () 。无论我使用哪一个,我都会不断收到错误:

The type of the expression must be an array type but it resolved to 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();
}
}

最佳答案

是的,它会抛出错误,因为,

list : java.util.ArrayList NOT EQUAL matrix : char[][]

关于java - 尝试交换二维数组中的元素时,应该使用什么类型的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49028347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com