【问题标题】:JAVA - Not able to properly fill multidimentional array from another arrayJAVA - 无法从另一个数组正确填充多维数组
【发布时间】:2018-12-07 10:04:12
【问题描述】:

我有一串用逗号分隔的值,我将其转换为一个数组,然后我将用它来创建一个二维数组。在创建循环以将第一个数组中的数据添加到二维数组时,它会重复数据。

我得到的输出是:

4428,40,401,610,2016,3821,31,347,572,2015,4381,38,341,520,2014,2536,17,193,290,2013,4295,39,371,552,2012,4643,45,343,502,2011,3922,28,312,475,2010,4434,30,350,541,2009 ,4038,28,341,536,2008,218,1,20,28,2007,46,0,6,15,2006,65,0,9,16,2005,4428,40,401,610,2016,3821,31,347,572,2015,4381 ,38,2010101010101010101010175,201855,201855,20185,20001855,201985,201855.555555555555555555555545 ,46,0,6,15,2006,65,0,9,16,2005,4428,40,401,610,2016,3821,31,347,572,2015,4381,38,341,520,2014,2536,17,193,290,2013,55225,39,37 ,4643,45,343,502,2011,3922,28,312,475,2010,4434,30,350,541,2009,4038,28,341,536,2008,218,1,20,28,2007,46,0,6,15,2006,65,0,9 ,16,20101019010190101010195019019015501855,2015,201855555555555555555555555555555555555555555555455555555555555555555555555555555558555555545 ,2009,4038,28,341,536,2008,218,1,20,28,2007,46,0,6,15,2006,65,0,9,16,2005,4428,40,401,610,2016,3821,31,347,572,2015 ,4381,38,341 ,5201010101010101010101010175,0190101010101010175,585,01010175,2015 ,46,0,6,15,2006,65,0,9,16,2005

正确的输出应该是:

4428,40,401,610,2016,3821,31,347,572,2015,4381,38,341,520,2014,2536,17,193,290,2013,4295,39,371,552,2012,4643,45,343,502,2011,3922,28,312,475,2010,4434,30,350,541,2009 ,4038,28,341,536,2008,218,1,20,28,2007,46,0,6,15,2006,65,0,9,16,2005

预期结果:

{{4428,40,401,610,2016}

{3821,31,347,572,2015}

{4381,38,341,520,2014}

...} 以此类推,每 5 个

我将数组添加到二维数组的代码如下:

 {String[] columns = {"Yards","Touchdowns","Attempts","Incompletions","Year"};



String[] data1 = results1.split(",");

Object [][] data11 = new Object[columns.length][data1.length];
for(int i = 0; i<columns.length;i++){
    for(int j = 0; j<data1.length;j++){
    data11[i][j] = data1[j];
    //System.out.print(data11[i][j]+",");
}
}}

编辑:解决方案!

Object [][] data11 = new Object[data1.length/columns.length][columns.length];
int column = -1;
for(int j = 0; j<data1.length;j++){
    if(j % columns.length == 0) column = column+1;
            data11[column][j % 5] = data1[j];
}

【问题讨论】:

  • 您能否用代表预期结果的矩阵更新您的答案?所以我们可以理解您希望如何从一维数组传递到矩阵并知道如何解决问题。
  • @Joss 刚刚更新了矩阵。第 5 个数字始终是一年,所以应该一直到 2005 年,也就是最后一年
  • 我看不到你从哪里得到你的号码。请将 data1 变量添加到代码中。
  • 所以,据我所知,您的矩阵的大小应该是 [columns.length][data1.length / 5],不是吗?

标签: java jframe jtable


【解决方案1】:

也许这对你有用:

Object [][] data11 = new Object[columns.length][data1.length / 5];
int column = -1;
for(int j = 0; j<data1.length;j++){
    if(j % 5 == 0) column = column + 1
    data11[j % 5][column] = data1[j];
}

注意矩阵大小和分配也发生了变化。没试过,可能你可以做一个更漂亮的版本。希望对您有所帮助!

【讨论】:

  • 非常感谢!这真的很近,它让我到了那里!刚刚用有效的解决方案更新了它!
【解决方案2】:

你还循环了第一个数组 (i),所以他会重复它。就这样写吧:

 data11[0][j] = data1[j];

或者甚至根本不执行第一个循环,这取决于您的需要。 假设您的输出,您只想填写数组的第一个位置 (0)。

【讨论】:

  • 我原本打算将数组放入 JTable 中,但是当我尝试这样做时不会转到下一行,它只是将整个数组保留在第一行,下面有 4 个空行它。此外,在输出中,它有一堆空值代替错误数据的位置。
  • 出现重复是正常的。这就是你的循环所说的。所以首先你要循环列数组,对于列数组中的每个位置,你要在里面放一个新数组(data1)。但是您对列数组的每个位置都执行此操作。所以你有重复是正常的。你能告诉我你的总体目标吗?所以我可以尝试找到更好的解决方案。
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多