我遇到了麻烦,也许你可以帮我: 我有3个字符串,如:word1,word2,word3,我必须与他们建立一个矩阵,像这样: 在第一行:word1(“ ABC“),第二行:word2(”DEF“)和第三行:word3(”GHI“)。如何将字符串放入矩阵?
A|B|C
D|E|F
G|H|I
我需要这是因为后,我要检查,如果形成的话(“ADG”,“BEH”,“CFI”)是在字的阵列。我不知道如何将这些字符串放在矩阵中,以便我可以检查。任何帮助都很有用。 感谢
我遇到了麻烦,也许你可以帮我: 我有3个字符串,如:word1,word2,word3,我必须与他们建立一个矩阵,像这样: 在第一行:word1(“ ABC“),第二行:word2(”DEF“)和第三行:word3(”GHI“)。如何将字符串放入矩阵?
A|B|C
D|E|F
G|H|I
我需要这是因为后,我要检查,如果形成的话(“ADG”,“BEH”,“CFI”)是在字的阵列。我不知道如何将这些字符串放在矩阵中,以便我可以检查。任何帮助都很有用。 感谢
:
的话具有相同的大小,因为矩阵实际上是就像一个谜。我从一个数组中随机选择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个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;
}
非常感谢你和麻烦抱歉。 – OanaM 2013-04-20 15:11:57
@OanaMocean不客气:)。 – 2013-04-20 15:38:23
您可以构建的结果的话没有一个矩阵:
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
来提高效率,但我怀疑这是非常需要的。
实际上,你不需要明确地放入一个StringBuilder,这是编译器已经为你做的一个优化。 – 2013-04-20 14:42:10
我很怀疑。当我编写“ABC”+“DEF”时,因为编译器会看到常量,所以我进行了优化。它只适用于常量。 – 2013-04-20 14:43:06
好吧,我用你的代码创建了一个快速示例类,并根据javap -v,在那里有一个StringBuilder。也许它与编译器设置有关,但我没有碰到我的。 – 2013-04-20 14:46:01
我想你可以做到这一点。
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");
这看起来不像一个答案...太多的硬代码.. – 2013-04-20 14:34:22
但是这是硬编码。 – Elior 2013-04-20 14:34:26
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
方法
该目标的主要目标是您正在采取一维值,并将其转换为二维值。有很多方法可以做到这一点,但这里是来把我的头顶部的两个:
建立一个嵌套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;
}
我认为这会排序你的问题。
包装印刷;
公共类矩阵{
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]);
}
}
}
1)没有必要在问题标题标签。 2)它是拼写Java(一个专有名称),而不是JAVA(缩写/缩写)。 – 2013-04-20 14:27:05
3)你有什么尝试?显示你的代码。 – Maroun 2013-04-20 14:27:32
你尝试过使用二维数组的字符吗? – Juvanis 2013-04-20 14:27:53