0

我遇到了麻烦,也许你可以帮助我:我有 3 个字符串,例如:word1、word2、word3,我必须用它们构建一个矩阵,如下所示:在第一行:word1("ABC"),第二行:word2("DEF") 第三行:word3("GHI")。

A|B|C
D|E|F
G|H|I

我需要这个,因为在那之后我必须检查形成的单词(“ADG”,“BEH”,“CFI”)是否在一个单词数组中。而且我不知道如何将这些字符串放入矩阵中以便我可以检查。任何帮助都是有用的。谢谢

4

5 回答 5

1

基于此评论:

单词的大小相同,因为矩阵实际上就像一个拼图。我从一个数组中随机选择 3 个单词,将它们放在一个矩阵中,然后检查结果是否来自同一个数组。

我会假设一些事情来完成这项工作(因为我们没有足够的信息):

  1. 您有一个Strings 数组,其中包含所有单词

    private String[] words;
    
  2. 您有一种方法可以String从该数组中随机选取 3 秒。

    private String s1, s2, s3;
    
    public void pickThreeRandomWords() {
        s1 = aRandomWord(words);
        s2 = aRandomWord(words);
        s3 = aRandomWord(words);
        //or maybe another fancy algorithm to get this...
    }
    

char所以你需要一个基于这 3 个s的数组String。此代码可以为您完成工作:

public char[][] createMatrixFromStrings(String s1, String s2, String s3) {
    char[][] theMatrix = new char[3][]; //yes, hardcoded
    theMatrix[0] = s1.toCharArray();
    theMatrix[1] = s2.toCharArray();
    theMatrix[2] = s3.toCharArray();
    return theMatrix;
}

当然,如果你想让这个方法支持超过 3 个Strings,你可以让这个方法接收随机数量的Strings:

public char[][] createMatrixFromStrings(String ... strings) {
    if (strings == null || strings.length == 0) return null;
    char[][] theMatrix = new char[strings.length][];
    int i = 0;
    for(String s : strings) {
        theMatrix[i++] = s.toCharArray();
    }
    return theMatrix;
}
于 2013-04-20T14:56:55.650 回答
0

Java没有矩阵。它有array of array

所以,你可以试试这个

List<char[]> lst=new ArrayList();//stores a list of char[]
lst.add(("ADC".toCharArray()));//adds array of characters i.e 'A','D','C'
lst.add(("DEF".toCharArray()));
lst.get(0)[0];//A
lst.get(1)[0];//D

现在您可以垂直迭代

for(int i=0;i<lst.size();i++)temp+=lst.get(i)[0];

temp 将具有AD您现在可以使用equals方法进行交叉检查的

于 2013-04-20T14:43:26.880 回答
0

您可以在没有矩阵的情况下构建结果词:

List<String> verticalWords = new ArrayList<String>();
for (int i = 0; i < horizontalLen; i++){
    String currentWord = "";
    for (int j = 0; j < wordCount; j++)
        currentWord += words.get(j).get(i);

    verticalWords.add(currentWord);
}

PS 对于currentWord你可以使用 aStringBuilder来提高效率,但我怀疑这里非常需要它。

于 2013-04-20T14:30:16.983 回答
0

我认为这将解决您的问题。

包装印刷;

公共类矩阵{

public static void main(String[] args) {




    //Length can define as you wish




    String[] max = new String[10];




    String[] out = null;
    //Your Inputs




    max[0]="ADG";




    max[1]="BEH";




    max[2]="CFI";




    //following for loop iterate your inputs
    for (int i = 0; i < max.length; i++) {




        if(out==null){out= new String[max.length];}




        String string = max[i];




        if(string==null){ break;}




        //Here breaking input(words) one by one into letters for later contcatnating.
        String[] row = string.split("");




        for (int j = 0; j < row.length; j++) {




            String string1 = row[j];
          //  System.out.println(string1);




            //create the values for rows
           if(out[j]!=null){ out[j]=out[j]+string1;}




           else{




           out[j]=string1;
           }
        }
     }
    //following for loop will out put your matrix.
    for (int i = 0; i < out.length; i++) {
        String string = out[i];
        if(out[i]==null){break;}
        System.out.println(out[i]);

    }
}

}

于 2013-04-20T15:16:05.790 回答
0

这个目标的主要推动力是你正在获取一维值,并将其转换为二维值。有很多方法可以做到这一点,但以下是我想到的两种:

  • 设置一个嵌套的while循环来迭代第一个维度,当它达到长度时,重置并导致外部循环增加,就像一个时钟

  • 您可以使用创建一个新的子ArrayUtils.toSubArray()数组,并通过一些技巧,让它工作:

    • 每次根据您要查找的维度切片创建一个新的数组行。我将把这个作为练习留给读者。但这里有一个提示:

      for(int i = 0; i < theDimension; i++, j += 3) {
          ret[i] = ArrayUtils.subarray(word, i*theDimension, j);
      }
      

最后,我假设您可以接收的输入类型受到限制。矩阵必须是正方形的,所以我在构建数组之前强制执行该限制。

强烈鼓励你戳戳这个答案,而不是盲目地将它复制到你的作业中。了解它在做什么,以便在将来再次被要求时重现它。

public char[][] toMatrix(int theDimension, String theEntireWord) {
    if(theEntireWord.length() != theDimension * theDimension) {
        throw new IllegalArgumentException("impossible to add string to matrix of uneven dimension");
    }
    char[][] ret = new char[theDimension][theDimension];
    int i = 0;
    int j = 0;
    while(i < theDimension) {
        if(j == theDimension) {
            j = 0;
            ++i;
        } else {
            ret[i][j] = theEntireWord.charAt((i * theDimension) + j);
            j++;
        }
    }
    return ret;
}
于 2013-04-20T14:53:12.910 回答