我遇到这个问题,也许你可以帮助我: 我有3个字符串,如:word1,word2,word3,我必须用它们构建一个矩阵,如下所示: 在第一行:word1(“ABC”),第二行:word2(“DEF”)和第三行:word3(“GHI”)。
A|B|C
D|E|F
G|H|I
我需要这个,因为在那之后我必须检查所形成的单词(“ADG”,“BEH”,“CFI”)是否在一个单词数组中。而且我不知道如何将这些字符串放在矩阵中以便我可以检查。任何帮助都很有用。 感谢
答案 0 :(得分:1)
基于此评论:
单词大小相同,因为矩阵实际上就像拼图一样。我从一个数组中随机选择3个单词,将它们放在一个矩阵中,然后检查结果是否来自同一个数组。
为了使这项工作,我会假设一些事情(因为我们没有足够的信息):
您有String
个数组,其中包含所有单词
private String[] words;
你有一种方法可以从这个数组中随机选取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 char
个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 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]);
}
}
}