java:根据给定的char数组洗牌2d数组

mrOser5

初学者的问题在这里:

我有一个给定的单词,应该按出现顺序为每个字母分配数字。
然后随机排列单词并根据字母的外观打印数字

  • 可视化:

单词:CODEWORD
按字母顺序排序:CDDEOORW

分配编号:

C D D E O O R W    
0 1 2 3 4 5 6 7

根据原始单词的“随机”字母:

C O D E W O R D
0 4 1 3 7 5 6 2

(我不介意以整数格式存储字符)

  • 实作

package hallo;
import java.util.Arrays;

public class test {

    public static void shuffle(char[] k)
    {
        char[] m = k.clone();
        Arrays.sort(m);

        //array where I store my numbers
        int[] numbers = new int[k.length];

        //2d array to assign numbers to letters
        int[][] per = new int[2][m.length];
        // 2d array to store the "shuffled" word
        int[][] per2 = new int[2][k.length];

        //fill numbers array with integers to ascii order
        for(int i=0;i<m.length;i++){
            numbers[i] = i;
            // 0 1 2 3 4 5 6 7
        }

        // fill first 2d array
        for (int i = 0; i < m.length; i++) {
            per[0][i] = m[i];
            per[1][i] = numbers[i];
        }

        // now to fill the second array with "shuffled" word
        for (int j = 0; j < k.length; j++) {
            for (int i = 0; i < k.length; i++) { // k and m length is the same
                if (per[0][i] == k[j]) {
                    per2[0][i] = per[0][i];
                    per2[1][i] = per[1][i];
                    //fill the numbers array with the new order
                    numbers[j] = per[1][i];
                }
            }
        }
        System.out.println("numbers: ->"+Arrays.toString(numbers));
    }

    public static void main(String[] args){
        char[] word = {'C','O', 'D', 'E', 'W', 'O', 'R', 'D'};
        shuffle(word);
        // expected :  0 4 1 3 7 5 6 2
    }

}

预期的输出为0 4 1 3 7 5 6 2,如上面的可视化所示。
但实际输出为0 5 2 3 7 5 6 2

看起来像OD多次出现的字符会导致此问题。

我试图在找到字母后立即中断for循环,或将字母出现的数字存储在单独的数组中,但到目前为止没有任何效果。任何帮助或纠正将不胜感激。

乔治

填充数字[j]的循环不会检查位置是否已添加。结果,对于每次出现字符,都将相同的索引添加到结果中。您可以使用布尔数组来标记已使用的索引。并且仅在不使用索引的情况下检查排序数组m中的字符。

public static void shuffle (char[] k) {
    
    char[] m = k.clone();
    Arrays.sort(m);
    
    boolean[] used = new boolean[k.length];
    int[] numbers = new int[k.length];
    
    for(int i=0;i<k.length;i++) {
        for (int j=0; j<m.length; j++) {
            if (k[i] == m[j] && !used[j]) {
                numbers[i] = j;
                used[j] = true;
                break;
            }
            
        }
    }
    
    System.out.println("numbers: ->"+Arrays.toString(numbers));
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据给定的条件找出2D布尔数组的所有可能组合(使用Java)

来自分类Dev

根据给定的条件找出2D布尔数组的所有可能组合(使用Java)

来自分类Dev

Java | 将2D int数组转换为2D char数组以进行println

来自分类Dev

将矩阵存储在2d char数组Java中

来自分类Dev

在2D Java数组中显示char而不是0

来自分类Dev

免费的2D char数组

来自分类Dev

破烂的* char 2d数组与realloc

来自分类Dev

2D数组作为指向char数组的指针

来自分类Dev

通过给定正数使用递归在Java中构建2d数组

来自分类Dev

如何通过给定正数使用递归在Java中构建2d数组?

来自分类Dev

查找并返回给定2D数组的所有循环

来自分类Dev

根据另一个2D数组重新排序2D数组

来自分类Dev

2D字符数组和char **之间的区别(或,3D字符数组和char ***等)

来自分类Dev

2D字符数组和char **之间的区别(或,3D字符数组和char ***等)

来自分类Dev

用1d char数组附加2d char数组(在C中)

来自分类Dev

java将char 2D数组(字母)的值转换为整数(数字)

来自分类Dev

Java在2D数组中切换char元素

来自分类Dev

Java 2d数组的大小

来自分类Dev

Java for循环和2D数组

来自分类Dev

Java 2D数组学习

来自分类Dev

用Java填充2D数组

来自分类Dev

Java对象和2D数组

来自分类Dev

Java for循环和2D数组

来自分类Dev

Java 2D数组保持距离

来自分类Dev

2D数组升序BubbleSort Java

来自分类Dev

填充动态2D Java数组

来自分类Dev

用Java打印2D数组

来自分类Dev

java 2d数组比较UPDATED

来自分类Dev

Java对象和2D数组