我有一个文本文件,其中包含n个运动员姓名,每个名字都在一个新行上,运动员的数量在文本文件的第一行写成int。我到目前为止编写的代码读取文本文件,并使用扫描仪创建一个包含所有数据的数组(运动员姓名)。 我想知道的是,是否有可能使用一种方法为每个运动员创建一个单独的阵列(我稍后将用分数/表现数据填充这些数据)。在扫描文本文件之前我无法初始化这些文件,因为尚不知道运动员的数量。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class TextScanner {
private static void readFile(String fileName) {
try {
List<String> distance = new ArrayList<String>();
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
distance.add(scanner.next());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
readFile(args[0]);
}
}
Java很新,所以我道歉。我环顾四周,似乎无法找到任何信息。 谢谢
答案 0 :(得分:4)
是的,但是Array
有一定的限制,因为它无法动态展开和折叠
试试这种方式
创建一个类Athelete
,其中包含您要为athelete保留的属性
说
Class Athelete{
private String name;
private Integer age;
private String skill;
// then Getters and Setters for each of these
}
并创建一个地图
Map<String,Athelete> // having `name` as Key and `athelete object` as value.
现在从文件中读取并创建Athelete对象并将其添加到Map
。
Person p=new Person();
p.setName=nameFromFile();
// also set further attributes
map.put(p.getName,p);
答案 1 :(得分:2)
您可以创建课程Athlete
:
class Athlete{
String name;
int score;
Athlete(String name){
this.name = name;
}
int getScore(){return score;}
void setScore(int score){ this.score = score}
}
并将Athlete
的实例插入到数组或List:
List<Athlete> distance = new ArrayList<>();
distance.add(new Athlete('Some name'));
UPD:如果您使用Java7,请考虑java.nio.file.Files
而不是Scanner
来读取小型文件。我认为readAllLines方法对您有用。
答案 2 :(得分:2)
由于Java是面向对象的语言思考对象,在你的情况下它似乎是运动员,分数和性能
public class Athlete {
String name;
List<Score> scores = new ArrayList<Score>();
List<Performance> performances = new ArrayList<Performance>();
}
public class Score {
String score
}
public class Performance {
int performnce
}
所以List<String> distance = new ArrayList<String>();
这将成为List<Athlete> Athletes = new ArrayList<Athlete>();
对于文件中的每条记录,创建Athlete对象并将名称存储在name
实例变量中。当你获得每个特定运动员的分数和表现时,会更新上面已经创建的运动员对象。
<强>更新强>
正如其他评论员指出的那样,使用Map
而不是List
是合适的。
例如Map<String, Athlete> athletes = new HashMap<String, Athlete>();
这种方式稍后在接收得分和表演时更新变得更容易。
此外,得分和表现是列表,因为运动员可以有多个得分和表演。
答案 3 :(得分:0)
您可以先将所有数据(运动员姓名)添加到列表中,然后再调用list.toArray(new Athlete [list.size()]);这将为您提供所需的数组
答案 4 :(得分:0)
当然,您可以为文件中的每条记录创建一个数组。方法签名看起来就像是。
String[] readAthleteData() {...}
但是,使用像ArrayList这样的集合通常比数组更方便。