在每一行和每一列中创建一个具有唯一字符的 2D 字符表

米哈乌·格里纽克

我正在尝试制作一个二维表,其中字符不能在列或行中重复。我正在尝试做至少 2 行数组。我可以做第一个,但我对其他行有问题。在第二行,它抛出一个错误 - ArrayIndexOutOfBoundsException -11。有人能帮我吗?

主要类:

import java.util.ArrayList;
import java.util.Random;

public class Main {

char[][] table = new char[26][26];
Random r;

public static void main(String[] args) {
    new Main();
    new GlobalVars();
}

public Main() {
    r = new Random();
    createFirstLine();
    createOtherLine(1);
}

public void createFirstLine() {
    ArrayList<Integer> intLeft = GlobalVars.cIntToArrL();

    int counter = 0;
    for(int i = intLeft.size(); i > 0; i--) {
        int charPosChosen = r.nextInt(intLeft.size());
        int charPosGot = intLeft.get(charPosChosen);

        table[0][counter] = GlobalVars.getCharValue(charPosGot);
        counter ++;
        intLeft.remove(charPosChosen);
    }

    System.out.println(table[0]);
}

public void createOtherLine(int n) {
    ArrayList<Integer> intLeft = GlobalVars.cIntToArrL();
    for(int i = 0; i < 26; i++) {
        ArrayList<Integer> intLeftForCell = intLeft;
        for(int column = 0; column < n; column ++) {
            intLeftForCell.remove(
                    GlobalVars.getNumericValue(table[n][i])
                    );
        }
        int charPosChosen = r.nextInt(intLeftForCell.size());
        int charPosGot = intLeftForCell.get(charPosChosen);

        table[1][i] = GlobalVars.getCharValue(charPosGot);
        intLeft.remove((Integer)charPosGot);
    }
    System.out.println(table[1]);
}
}

GlobalVars 类:

import java.util.ArrayList;

public class GlobalVars {

public static String alphStr = "abcdefghijklmnopqrstuvwxyz";
public static char[] alphArr;
public static int[] intArr = new int[26];

public GlobalVars() {
    // Changing alphabet String to alphabet Array
    alphArr = alphStr.toCharArray();

    for(int i = 0; i < 26; i++) {
        intArr[i] = i;
    }
}

public static ArrayList<Integer> cIntToArrL() {
    ArrayList<Integer> list = new ArrayList<Integer>();
    for(int i = 0; i < 26; i++) {
        list.add(i);
    }
    return list;
}

public static int getNumericValue(char c) {
    return Character.getNumericValue(c) - 10;
}

public static char getCharValue(int i) {
    return Character.forDigit(i + 10, i + 11);
}

}
约翰·史密斯

我有点迷失在你的代码中。如果我理解你想正确完成什么,你想随机生成二维(正方形)数组,其中每一行和每一列的每个字符都恰好一次(不重复,也不在字母表中丢失)。是对的吗?如果是,这是我如何解决这个问题的方法:

  1. 从字母表创建模式(使用独特的字符规则)
  2. 随机播放所有行(随机,可能使用种子)
  3. 随机排列所有列(随机,可能使用种子)

第 1 步 - 创建表:

char alphabet[] = {'a','b','c', ...}; // Set of chars that will be used in table
char table[][] = new char[26][26]; // Size must be same as size of alphabet

private void prepareTable() {
    for (int x = 0; x < table.length; x++) {
        for (int y = 0; y < table[x].length; y++) {
            // Copy alphabet to row in table but offset it each row by 1
            table[x][y] = alphabet[(x + y) % alphabet.length];
        }
    }
    // Now table looks like this:
    // 'a' 'b' 'c'
    // 'b' 'c' 'a'
    // 'c' 'a' 'b
}

第 2 步 - 洗牌行:对于实际洗牌,我使用Fisher-Yates Shuffle

Random r = new Random( /* seed */ );
void shuffleRows() {
    int items = table.length;

    while (items > 0) { // While there is something to shuffle
        int index = r.nextInt(items);

        // Simple swap
        char[] tmp = table[index];
        table[index] = table[items - 1];
        table[items - 1] = tmp;

        items --; // Move on to the next
    }
}

第 3 步 - 洗牌列:

void shuffleColumns() {
    int items = table[0].length;

    while (items > 0) {
        int index = r.nextInt(items);

        // Swap chars in each row
        for (int i = 0; i < table.length; i++) {
            char tmp = table[i][index];
            table[i][index] = table[i][items - 1];
            table[i][items - 1] = tmp;
        }

        items --;
    }
}

就是这样。我希望它有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Select为表中的每一列返回2行

来自分类Dev

如何在C中将文件的第一行(字符串)和第一列(字符串)作为2d数组的索引

来自分类Dev

在R中的一列或一行中没有值的情况下创建2 x 2表

来自分类Dev

如何显示表中的数据以及如何在Yii2中查询另一个表中的每一行数据

来自分类Dev

使用STRCPY在另一个2d数组中复制2d字符数组

来自分类Dev

在文件的每一行的开头和结尾添加一个字符

来自分类Dev

使用LinkedHashMap的字符串中的第一个唯一字符

来自分类Dev

将2D阵列中的每一列与另一个2D阵列中的每一列相乘

来自分类Dev

在文本的每一行的开头和结尾添加一个字符

来自分类Dev

减去每一行的第一个元素中的2D阵列

来自分类Dev

查找2个字符串中的唯一字符

来自分类Dev

匹配bash中具有一定数量的唯一字符的字符串

来自分类Dev

为熊猫数据框的每一行替换一列中的字符串

来自分类Dev

从一个表中的一列中为每一行打印出值列表,在另一表中具有重叠的间隔

来自分类Dev

解决Elixir中的“字符串中的第一个唯一字符”

来自分类Dev

如何为数据帧的每一行创建一个列联表

来自分类Dev

在一列中循环访问唯一字符串,并从与该唯一字符串关联的其他2个列中创建字典或数据数组

来自分类Dev

连接2个表后如何为每一行选择一个值

来自分类Dev

使用LinkedHashMap的字符串中的第一个唯一字符

来自分类Dev

如何对html表的每一行和每一列的值求和

来自分类Dev

当一列(字符串)与唯一字符串匹配时,R提取一列(X,是一个整数)的数据

来自分类Dev

使用Unordered_map C ++字符串中的第一个唯一字符

来自分类Dev

使用 python 2 向列表中的每一行添加相同的字符串

来自分类Dev

在 Scala 中实现一个算法来确定一个字符串是否包含所有唯一字符

来自分类Dev

如果另一列具有相同的值,则将列中每一行的数据插入表中

来自分类Dev

如何为表中的每一行数据设置 2 个或更多单选按钮?

来自分类Dev

如何从CSV文件的每一行中删除第一列中的第一个字符?

来自分类Dev

在 2 元组的元组中打印唯一字符串

来自分类Dev

我想在 while 循环中添加一个 If 条件来检查 2 个文件中每一行中的相同字符串,如果匹配,则打印文件中的其他列

Related 相关文章

  1. 1

    SQL Select为表中的每一列返回2行

  2. 2

    如何在C中将文件的第一行(字符串)和第一列(字符串)作为2d数组的索引

  3. 3

    在R中的一列或一行中没有值的情况下创建2 x 2表

  4. 4

    如何显示表中的数据以及如何在Yii2中查询另一个表中的每一行数据

  5. 5

    使用STRCPY在另一个2d数组中复制2d字符数组

  6. 6

    在文件的每一行的开头和结尾添加一个字符

  7. 7

    使用LinkedHashMap的字符串中的第一个唯一字符

  8. 8

    将2D阵列中的每一列与另一个2D阵列中的每一列相乘

  9. 9

    在文本的每一行的开头和结尾添加一个字符

  10. 10

    减去每一行的第一个元素中的2D阵列

  11. 11

    查找2个字符串中的唯一字符

  12. 12

    匹配bash中具有一定数量的唯一字符的字符串

  13. 13

    为熊猫数据框的每一行替换一列中的字符串

  14. 14

    从一个表中的一列中为每一行打印出值列表,在另一表中具有重叠的间隔

  15. 15

    解决Elixir中的“字符串中的第一个唯一字符”

  16. 16

    如何为数据帧的每一行创建一个列联表

  17. 17

    在一列中循环访问唯一字符串,并从与该唯一字符串关联的其他2个列中创建字典或数据数组

  18. 18

    连接2个表后如何为每一行选择一个值

  19. 19

    使用LinkedHashMap的字符串中的第一个唯一字符

  20. 20

    如何对html表的每一行和每一列的值求和

  21. 21

    当一列(字符串)与唯一字符串匹配时,R提取一列(X,是一个整数)的数据

  22. 22

    使用Unordered_map C ++字符串中的第一个唯一字符

  23. 23

    使用 python 2 向列表中的每一行添加相同的字符串

  24. 24

    在 Scala 中实现一个算法来确定一个字符串是否包含所有唯一字符

  25. 25

    如果另一列具有相同的值,则将列中每一行的数据插入表中

  26. 26

    如何为表中的每一行数据设置 2 个或更多单选按钮?

  27. 27

    如何从CSV文件的每一行中删除第一列中的第一个字符?

  28. 28

    在 2 元组的元组中打印唯一字符串

  29. 29

    我想在 while 循环中添加一个 If 条件来检查 2 个文件中每一行中的相同字符串,如果匹配,则打印文件中的其他列

热门标签

归档