我遇到了麻烦,也许你可以帮助我:我有 3 个字符串,例如:word1、word2、word3,我必须用它们构建一个矩阵,如下所示:在第一行:word1("ABC"),第二行:word2("DEF") 第三行:word3("GHI")。
A|B|C
D|E|F
G|H|I
我需要这个,因为在那之后我必须检查形成的单词(“ADG”,“BEH”,“CFI”)是否在一个单词数组中。而且我不知道如何将这些字符串放入矩阵中以便我可以检查。任何帮助都是有用的。谢谢
基于此评论:
单词的大小相同,因为矩阵实际上就像一个拼图。我从一个数组中随机选择 3 个单词,将它们放在一个矩阵中,然后检查结果是否来自同一个数组。
我会假设一些事情来完成这项工作(因为我们没有足够的信息):
您有一个String
s 数组,其中包含所有单词
private String[] words;
您有一种方法可以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 个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;
}
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
方法进行交叉检查的
您可以在没有矩阵的情况下构建结果词:
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
来提高效率,但我怀疑这里非常需要它。
我认为这将解决您的问题。
包装印刷;
公共类矩阵{
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]);
}
}
}
这个目标的主要推动力是你正在获取一维值,并将其转换为二维值。有很多方法可以做到这一点,但以下是我想到的两种:
设置一个嵌套的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;
}