Java 另一个将文本文件放入Arraylist的方法
我试图在文本文件中获取每行上的每个元素,这样我就可以逐行执行计算。问题是我只能从我的文本中获取每个单独的元素。我希望能够指向第50行,提取第一个元素,第二个,第三个元素,然后转到第51行,做同样的事情Java 另一个将文本文件放入Arraylist的方法,java,text,arraylist,Java,Text,Arraylist,我试图在文本文件中获取每行上的每个元素,这样我就可以逐行执行计算。问题是我只能从我的文本中获取每个单独的元素。我希望能够指向第50行,提取第一个元素,第二个,第三个元素,然后转到第51行,做同样的事情 import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ReadWithScanner { public stat
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ReadWithScanner {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new File("/Users/evanlivingston/2.txt"));
List<Double> doubles = new ArrayList<Double>();{
while(scanner.hasNextLine()){
doubles.add(scanner.nextDouble());
}
for( int counter=0; counter<doubles.size(); counter++ ) {
// j=i+1 to calculate the distance between two points only once,
// not one way and back; also skip calculating distance between
// the same point
for( int j=counter+1; j<doubles.size(); j++ ) {
Double c1 = doubles.get(counter);
Double c2 = doubles.get(j);
System.out.println(c1 - c2);
}
}
}
}
}
import java.io.*;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共类ReadWithScanner{
公共静态void main(字符串[]args)引发IOException{
Scanner Scanner=new Scanner(新文件(“/Users/evanlivingston/2.txt”);
List double=new ArrayList(){
while(scanner.hasNextLine()){
doubles.add(scanner.nextDouble());
}
对于(int counter=0;counter我认为问题在于:
while(scanner.hasNextLine()){
doubles.add(scanner.nextDouble());
}
如果您的意图是解析一行中的每一个double,并且有多行,那么您就做错了。
我想你需要这样的东西:
while (scanner.hasNextLine()){
String currentLine = scanner.nextLine();
//here iterate the string currentLine to get each double
}
我认为问题在于:
while(scanner.hasNextLine()){
doubles.add(scanner.nextDouble());
}
如果您的意图是解析一行中的每一个double,并且有多行,那么您就做错了。
我想你需要这样的东西:
while (scanner.hasNextLine()){
String currentLine = scanner.nextLine();
//here iterate the string currentLine to get each double
}
扩展0verbose的答案:似乎您希望按行获取元素,即稍后您希望知道double在哪一行
因此,尝试使用列表
,并为每一行创建一个子列表。
如果所有行都有相同数量的元素,您可以使用单个列表,然后使用index=line\u no*num\u elements\u per\u line+element\u index\u in\u line
来处理特定的元素。根据0verbose的回答展开:看起来您想逐行获取元素,即稍后您想知道这两个元素在哪一行
因此,尝试使用列表
,并为每一行创建一个子列表。
如果所有的行都有相同数量的元素,你可以使用一个列表,然后使用index=line\u no*num\u elements\u per\u line+element\u index\u in\u line
来处理一个特定的元素。你能把这个问题改写一下吗。要理解你的问题到底是什么有点困难。你说为什么有嵌套循环你想提取每行的第一、第二和第三个元素,但似乎每行都有6个元素。你是故意跳过第4到第6个元素的吗?你能把问题改写一下吗?要理解你的问题到底是什么有点困难。为什么有嵌套循环?你说你想提取第一、第二和第三个元素但似乎每行都有6个元素。你是故意跳过元素4到6吗?虽然我同意这是一种糟糕的风格,但它会得到所有元素。hasNextLine()
不会跳过这一行的其余部分。@glowcoder:你说得对。无论如何,我认为他的问题与每一行的每一个double有关,通过一行访问它们。因此它应该调用nextLine()把所有的东西分成两行groups@Overbose,在我开始遍历行并进行计算之前,我正在尝试将整个文本加载到内存中,您提出的解决方案不允许这样做?@Evan即使加载所有文本,也可以这样做,但1,您现在还没有将整个文本加载到内存中,2为什么你愿意吗?@glowcoder,我正在对文件中的每一行和每一行执行计算,如果我有60000行,我将创建3600000000行。我正在尽可能地提高效率。虽然我同意这是一种糟糕的风格,但它会把它们都计算出来。hasNextLine()
不会跳过这一行的其余部分。@glowcoder:你说得对。无论如何,我认为他的问题与每一行的每一个double有关,通过一行访问它们。因此它应该调用nextLine()把所有的东西分成两行groups@Overbose,在我开始遍历行并进行计算之前,我正在尝试将整个文本加载到内存中,您提出的解决方案不允许这样做?@Evan即使加载所有文本,也可以这样做,但1,您现在还没有将整个文本加载到内存中,2为什么你愿意吗?@glowcoder,我在计算文件中的每一行,每一行,如果我有60000行,我会创建3600000000行。我会尽可能地提高效率。