【发布时间】:2020-11-09 07:25:22
【问题描述】:
请参考我创建的以下图片,我认为这将有助于澄清我的问题。颜色编码是为了帮助识别每个数组中的元素。
我只是在学习 Java,并试图了解练习题的解决方案。我有一个 Java 程序读取的 .CSV 文件,我有两个数组。一个数组有标题,另一个数组的值最初存储为字符串(后来转换为双精度数,因为问题中的实际数字是双精度数)。
但是,当运行拆分“lines”数组的代码时,这不会创建多个具有重复名称的数组,如图所示?
代码似乎用简单的英语说,“对于“lines”数组中的每个字符串元素,将字符串拆分到任何有逗号的地方,并将每个新字符串作为一个元素存储在名为“values”的字符串数组中“。”
还是只创建一个名为“values”的新数组,其中包含 20 个单独的元素?如果是这种情况,那么我不明白第二个 for-each 循环中的计数器(“cnt”)如何知道如何在第 5 个标头之后循环回到第一个标头。
所以假设第一个猜测是正确的,这不会导致在每个数组中具有不同值的重复数组名称的问题吗?第二个 for-each 循环如何知道我要迭代哪些“值”数组?它如何知道遍历所有“值”数组?
还是发生了我不理解的其他事情?我正在学习的视频并没有真正清楚地解释它:/
编辑以添加每个请求的代码块
我们从两个数组开始,lines数组和headers数组:
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"]
我理解这些是永久性的,而不是像一条评论所建议的那样在每次循环迭代后“被遗忘”的原因是,这些数组中的每一个都在第二个 for-each 循环中进一步迭代,我们在其中添加了一个标题每个值,有效地创建一个 HashMap 列表,每个数组都有一个针对该特定数组中每个值的标题。直到第一个 for-each 循环完成运行后才会发生这种情况,那么如果忘记了数组,它怎么能返回并添加标题呢?
代码块中的第二个for-each循环:
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...]
编辑:我一直在寻找,但仍然无法找到这个问题的答案。
【问题讨论】:
-
请不要添加图片,而是添加代码以获得更好的帮助
-
第一次通过 for 循环,values 持有对第一个五个字符串数组的引用。第二次通过循环,values 持有对第二个五个字符串数组的引用,依此类推。每次,前一个数组都被“遗忘”。
-
请edit您的问题在此处将代码显示为文本以与图像一起显示。
-
更新添加代码块并添加一些更清晰的思维过程
-
请在这方面寻求帮助..