2013-04-20 93 views
0

我遇到了麻烦,也许你可以帮我: 我有3个字符串,如:word1,word2,word3,我必须与他们建立一个矩阵,像这样: 在第一行:word1(“ ABC“),第二行:word2(”DEF“)和第三行:word3(”GHI“)。如何将字符串放入矩阵?

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

我需要这是因为后,我要检查,如果形成的话(“ADG”,“BEH”,“CFI”)是在字的阵列。我不知道如何将这些字符串放在矩阵中,以便我可以检查。任何帮助都很有用。 感谢

+2

1)没有必要在问题标题标签。 2)它是拼写Java(一个专有名称),而不是JAVA(缩写/缩写)。 – 2013-04-20 14:27:05

+2

3)你有什么尝试?显示你的代码。 – Maroun 2013-04-20 14:27:32

+0

你尝试过使用二维数组的字符吗? – Juvanis 2013-04-20 14:27:53

回答

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个String S的char列数组的数组。此代码可以为你做的工作:

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是你可以做的方法得到的String个随机量:

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

非常感谢你和麻烦抱歉。 – OanaM 2013-04-20 15:11:57

+0

@OanaMocean不客气:)。 – 2013-04-20 15:38:23

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

附:对于currentWord,您可以使用StringBuilder来提高效率,但我怀疑这是非常需要的。

+0

实际上,你不需要明确地放入一个StringBuilder,这是编译器已经为你做的一个优化。 – 2013-04-20 14:42:10

+0

我很怀疑。当我编写“ABC”+“DEF”时,因为编译器会看到常量,所以我进行了优化。它只适用于常量。 – 2013-04-20 14:43:06

+0

好吧,我用你的代码创建了一个快速示例类,并根据javap -v,在那里有一个StringBuilder。也许它与编译器设置有关,但我没有碰到我的。 – 2013-04-20 14:46:01

-1

我想你可以做到这一点。

ArrayList<ArrayList<String>> m = new ArrayList<ArrayList<String>>(); 

m.get(0).add("A"); m.get(0).add("B"); m.get(0).add("C"); 
m.get(1).add("D"); m.get(1).add("E"); m.get(1).add("F"); 
m.get(2).add("G"); m.get(2).add("H"); m.get(2).add("I"); 
+0

这看起来不像一个答案...太多的硬代码.. – 2013-04-20 14:34:22

+0

但是这是硬编码。 – Elior 2013-04-20 14:34:26

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

临时会有你现在可以cr的AD oss检查equals方法

0

该目标的主要目标是您正在采取一维值,并将其转换为二维值。有很多方法可以做到这一点,但这里是来把我的头顶部的两个:

  • 建立一个嵌套while循环在第一维迭代,当它到达的长度,复位,导致外环递增,就像一个时钟

  • 您可以使用ArrayUtils.toSubArray()一个新的子阵,并与一些finagling,得到那个工作:

    • 创建的新行数组,每次基于尺寸切片yo你想打起来。我会留下这个作为练习读者。但这里有一个提示:

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

    } 
} 

}