我很难弄清楚如何将多维数组合并到一个单独的数组中。
这是我的代码:
String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
String[] singleArray = new String[6];
for(int i=0; i<singleArray.length; i++)
{
for(int x=0; x<multiArray.length; x++)
{
for(int z=0; z<multiArray[x].length;z++)
{
//for(int i=0; i<singleArray.length; i++)
//{
singleArray[i] = multiArray[x][z];
//}
}
}
}
for(String temp : singleArray){
System.out.println(temp);
}
结果
6
6
6
6
6
6
为什么?如何将所有数字放入一个数组中? 非常感谢!
答案 0 :(得分:4)
Sub main()
With Worksheets("L.NAM.M")
With .Cells.Find(What:="forecast_quarter", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
.Parent.Range(.Offset(1), .Parent.Cells(Rows.Count, .Column).End(xlUp)).Copy Destination:=Worksheets("NewForecast").Range("K" & Rows.Count).End(xlUp).Offset(1)
End With
End With
End Sub
答案 1 :(得分:3)
您需要为多维中的每个条目增加1维数组的索引:
String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
String[] singleArray = new String[6];
for (int x = 0, i = 0; x < multiArray.length; x++) {
for (int z = 0; z < multiArray[x].length; z++) {
singleArray[i++] = multiArray[x][z];
}
}
请注意,i
在外部循环中初始化,并且在1维数组中指定值时会增加。
另一个等价的替代方案是在内循环中递增i
:
for (int x = 0, i = 0; x < multiArray.length; x++) {
for (int z = 0; z < multiArray[x].length; z++, i++) {
singleArray[i] = multiArray[x][z];
}
}
答案 2 :(得分:1)
如何使用馆藏?
String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
List<String> result = new ArrayList<>();
for(String[] firstLevel : multiArray){
for(String secondLevel : firstLevel){
result.add(secondLevel);
}
}
return result.toArray();
答案 3 :(得分:1)
在您的代码中,您开始迭代要存储所有值的数组。你不应该开始迭代它,因为它没有数据。
逻辑很简单:您应该迭代您拥有的元素,读取每个元素并将其添加到目标数组中
首先是循环获取数组的第一维,然后为数组的第二维做一个嵌入式循环,现在可以读取二维数组的每个数据。
String[][] multiArray = { { "1", "2", "3" }, { "4", "5", "6" } };
String[] singleArray = new String[multiArray[0].length + multiArray[1].length];
int i = 0;
for (int j = 0; j < multiArray.length; j++) { // first dimension [j]
for (int k = 0; k < multiArray[j].length; k++) { // second dimension [k]
singleArray[i] = multiArray[j][k]; // here you get [j][k]
i++; // you go to next position of destination array
// when you had an entry
}
}
答案 4 :(得分:1)
您的代码不是逻辑。在递增单个数组的索引之前,迭代multidimentional数组的所有值。这就是为什么单个数组的每个项都包含多维数组的最后一项。
您应该避免在单个数组上进行迭代并使用计数器来写入其值。试试这个:
String[][] multiArray = {{"1","2","3"},{"4","5","6"}};
String[] singleArray = new String[6];
int counter=0;
for(int x=0; x<multiArray.length; x++)
{
for(int z=0; z<multiArray[x].length;z++)
{
singleArray[counter] = multiArray[x][z];
counter++:
}
}
for(String temp : singleArray){
System.out.println(temp);
}
答案 5 :(得分:1)
实际上在你的代码中,i的值没有改变,在每次更新步骤之后,没有必要让i作为所有循环的父级,你必须增加i的值。
int i=0;
while (i<singleArray.length)
{
for(int x=0; x<multiArray.length; x++)
{
for(int z=0; z<multiArray[x].length;z++)
{
singleArray[i++] = multiArray[x][z];
}
}
}
for(String temp : singleArray){
System.out.println(temp);
}
答案 6 :(得分:1)
错误是变量i
,表示singleArray
的索引,在内部两个循环的每次完整迭代中更新一次。因此,对于i的每个值,会发生什么,single[i]
在最外层循环的每次迭代中保持从1到6的所有值。这就是为什么1-D阵列中的所有索引都具有最后一个值,即6
。每当将值添加到postfix increment
时,您需要使用singleArray
运算符增加 i 值。不要循环。
int i=0; //starting index
for(int x=0; x<multiArray.length; x++)
{
for(int z=0; z<multiArray[x].length;z++)
{
singleArray[i++] = multiArray[x][z];
/* i's value is changed every time a value is added to
singleArray */
}
}