如何将字符串放入矩阵?

时间:2013-04-20 14:24:51

标签: java arrays string matrix words

我遇到这个问题,也许你可以帮助我: 我有3个字符串,如:word1,word2,word3,我必须用它们构建一个矩阵,如下所示: 在第一行:word1(“ABC”),第二行:word2(“DEF”)和第三行:word3(“GHI”)。

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

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

5 个答案:

答案 0 :(得分:1)

基于此评论:

  

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

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

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

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

    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...
    }
    
  3. 所以你需要一个基于这3 charString的数组数组。此代码可以为您完成工作:

    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 String s,您可以使该方法接收随机数量的String s:

    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;
    }
    

答案 1 :(得分: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);
}

P.S。对于currentWord,您可以使用StringBuilder来提高效率,但我怀疑这里非常需要它。

答案 2 :(得分: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方法

进行交叉检查

答案 3 :(得分: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;
}

答案 4 :(得分: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]);

    }
}

}