请参考我创建的以下图片,我认为这将有助于澄清我的问题。颜色编码是为了帮助识别每个数组中的元素。
https://ibb.co/cbvscXc
我只是在学习Java,并试图理解练习的解决方案。我有一个。Java程序读取的CSV文件,我有两个数组。一个数组有标头,另一个数组最初将值存储为字符串(稍后转换为Doubles,因为问题中的实际数字是Doubles)。
然而,当运行拆分“行”数组的代码时,这不是会创建多个具有重复名称的数组吗,如图所示?
这段代码似乎用简单的英语说:“对于“lines”数组中的每个String元素,只要有逗号,就拆分字符串,并将每个新字符串作为一个元素存储在一个名为“values”的String数组中。”
或者它只创建了一个名为“values”的新数组,其中有20个单独的元素?如果是这样的话,那么我不明白每个循环第二个循环中的计数器(“cnt”)是如何知道如何在第五个标头之后循环回到第一个标头的。
因此,假设第一个猜测是正确的,这不会导致每个数组中具有不同值的重复数组名称的问题吗?每个循环的第二个如何知道我想迭代哪个“值”数组?它如何知道迭代所有“值”数组?
还是发生了我不理解的其他事情?我正在学习的视频并没有真正解释清楚:/
编辑以添加每个请求的代码块
我们从两个数组开始,行数组和头数组:
lines Array ["1,2,3,4,5","6,7,8,9,10","11,12,13,14,15","16,17,18,19,20"]
headers Array ["Open","High","Low","Close","Volume"]
然后在lines数组上运行:
for(String line : lines) {
String[] values = line.split();}
如果我理解正确的话,应该会创建四个新的
永久的
数组,基本上将一个由四个元素组成的大数组分割成四个新的数组,每个数组有5个元素,如下所示:
values Array ["1","2","3","4","5"]
values Array ["6","7","8","9","10"]
values Array ["11","12","13","14","15"]
values Array ["16",17","18","19","20"]
正如一条评论所建议的那样,我认为这些数组是永久的,在循环的每次迭代后不会被“遗忘”,因为每个数组在第二个循环中都会被进一步迭代,我们在每个循环中为每个值添加一个头部,有效地创建了一个HashMaps列表,每个数组都有一个头部对应该特定数组中的每个值。这要等到第一个for每个循环运行完毕后才会发生,所以如果数组被遗忘了,它怎么能回去添加头呢?
代码块中每个循环的第二个循环:
int cnt = 0;
HashMap<String, Double> headerValueMap = new HashMap<>();
for (String value : values) {
double dval = Double.parseDouble(value);
headerValueMap.put(headers.get(cnt), dval);
cnt++;
}
这将创建新的HashMap:
headerValueMap [{Open=1, High=2, Low=3, Close=4, Volume=5}, {Open=6, High=7, Low=8, Close=9, Volume=10}, etc...]
编辑:我一直在寻找,但仍然无法找到这个问题的答案。