【问题标题】:create new array from old array column从旧数组列创建新数组
【发布时间】:2016-09-25 19:47:53
【问题描述】:

我是 OOP 的新手,但我正在尝试创建我的第一个更大的程序。 我已经阅读了一个 txt 文件并将值(双精度数)存储到一个数组中,我称之为 originalArray。文本有两列和 20 行。因此,当我想打印 txt 文件第一列中的值时,我只需编写:

 System.out.println(originalArray[0]);

 OUTPUT: 1991.00
         300.50
         498.50 .... et cetera... 

我的问题是我想使用 for 循环(或其他)来创建两个新数组,每个数组都包含来自“原始数组”的一列。

我认为它就像使用 for 循环一样简单,就像这样;

  double [] newArray = new double [20]; 

  for(int i = 0; i < originalArray.length; i++){

  newArray[i] = originalArray[0] //if I want to fill it with the first       

  //columns data... the second would be newArray2[i] = originalArray[1]
   } 

但这会用 originalArray 中的列中的一个元素填充新数组...所以 - 我需要帮助来了解如何编写循环来用一个选定列中的所有元素填充新数组。

非常感谢您的帮助!

问候/沮丧的新手

编辑:这就是我阅读 txt 文件的方式:

String file = "C:\\Users\\komena\\Desktop\\30th-sales.csv";

 BufferedReader br = null;
 String line = "";
 String splitBy = ";";

originalArray = new double [20]; 
br = new BufferedReader(new FileReader(file));
br.readLine();//skip the first line to get rid of header…  
while ((line = br.readLine()) != null) {

String[] readlineArray = line.split(splitBy);

for (int i = 0; i < readlineArray.length; i++) {
originalArray[i] = Double.parseDouble(readlineArray[i]);

}

全文(csv)文件:

300.50;330.00
489.50;296.50
34.50;399.50
900.00;1890.00
2052.00;568.00
354.00;0.00
399.00;0.00
1299.50;0.00
426.00;259.00
29.50;2300.50
99.50;349.50
2500.50;0.00
358.50;113.00
789.00;239.50
998.00;348.00
16.50;679.00
800.00;723.00
1899.50;950.50
550.50;568.00

【问题讨论】:

  • originalArray[0]中第一列的数据你有吗? originalArray的类型是什么?
  • 他们都是双重的。当我读取文件时,我首先将其读取到字符串数组,然后将其解析为双精度。稍后我需要使用数组来计算值,这就是为什么我需要将列分成两个数组。 (将分析每一列)。
  • 1991.00, 300.50, 489.50, 34.50, 900.00, 2052.00, 354.00, 399.00, 1299.50, 426.00, 29.50, 99.50, 2500.50, 358.50, 789.00, 998.00, 16.50, 800.00, 1899.50, 550.50 // the originalArray[0]的数据

标签: java arrays


【解决方案1】:

创建新的二维数组,其第一个维度的大小与originalArray 的长度相同,第二个维度的大小为 2(2 列)。然后简单地循环它并将旧值添加到一列,如果需要,也添加新值,否则它们将默认设置为0.0

double originalArray[] = {1991.00, 300.50, 498.50};
double newArray[][] = new double[originalArray.length][2];
for (int i=0; i<originalArray.length; i++) {
    newArray[i][0] = i                              // Fill the 1st column with sth like ID
    newArray[i][1] = originalArray[i];              // Copy the 1D array to the 2nd column
}
System.out.println(Arrays.deepToString(newArray));  // Print all the array values

输出:

[[1.0, 1991.00], 
 [2.0, 300.50], 
 [3.0, 498.50]]

而且你读错了文件。请注意,每行中有 2 个值以 ; 分隔,而行以 \n 分隔。因此,逐行读取并将 2 个值添加到数组中。

i 变量代表originalArray[] 的实际索引。

BufferedReader br = null;
String line = "";
int i=0;
double originalArray[] = new double[20]; 
br = new BufferedReader(new FileReader(file));
br.readLine();//skip the first line to get rid of header…  

while ((line = br.readLine()) != null && i<originalArray.length) {
    String[] readlineArray = line.split(";");
    originalArray[i] = Double.parseDouble(readlineArray[0]);
    originalArray[i+1] = Double.parseDouble(readlineArray[1]);
    i+=2;
}
System.out.println(Arrays.toString(originalArray));

【讨论】:

  • 你的代码很有意义,但我认为我在读取文件时可能做错了,因为现在我的输出看起来像; [[0.0, 1991.00], [1.0, 300.50], [2.0, 0.0], [3.0, 0.0], [4.0, 0.0], [5.0, 0.0], [6.0, 0.0], [7.0, 0.0], [ 8.0, 0.0], [9.0, 0.0], [10.0, 0.0], [11.0, 0.0], [12.0, 0.0], [13.0, 0.0], [14.0, 0.0], [15.0, 0.0], [16.0, 0.0], [17.0, 0.0], [18.0, 0.0], [19.0, 0.0], [20.0, 0.0]]
  • 为了帮助你,我必须看看你从文件中读取值的方式。无论如何尝试使用调试器,因为问题是originalArray[] 确实缺少某些值。
  • 还有一件事......是否可以用文件数据填充 newArray1[] 和 newArray2[] 而不是将数据读取到 originalArray[] 中?你可以在while循环中填充两个数组吗? (而不是一个即)
  • 当然,您可以自己尝试一下。我管理我的问题是为了解决将一维数组复制到二维数组中的原始问题。
猜你喜欢
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
相关资源
最近更新 更多