public static void main(String[] args) throws Exception{
String fileLocation = System.getProperty("user.dir");
String dataPath = fileLocation + File.separator + "predators.txt";
java.io.File file = new java.io.File(dataPath);
Scanner input = new Scanner(file);
input.useDelimiter(":");
String predatorsName, latinName, weight, speed, stealth, risk, killer, interestingFact;
for (int i = 0; input.hasNext(); i++) {
predatorsName = input.next();
latinName = input.next();
weight = input.next();
speed = input.next();
stealth = input.next();
risk = input.next();
killer = input.next();
interestingFact = input.nextLine();
System.out.println(weight);
}
}
嗨,我在这里有一个程序,该程序扫描文件将获得有关动物的多个数据,然后使用input.next()将每个单词/数字分配给相应的字符串。现在,当我打印重量时,所有动物的重量都会打印在输出中。我想知道是否可以...例如说在第三行上打印动物的体重?谢谢
答案 0 :(得分:1)
为什么不起作用
之所以要打印所有的权重,是因为在循环中您有以下内容:
for (int i = 0; input.hasNext(); i++) {
...
weight = input.next();
...
System.out.println(weight);
}
这意味着在循环的每次迭代中,它将首先存储权重,然后显示权重。这样,每个砝码将因此被打印在输出中。
解决方案
我将创建一个Predator
类,而不是在循环中显示权重(按照您当前的实现),我们将使用它来将数据填充到“捕食者”列表中。完成此操作后,我们才会显示它们。
创建捕食者类:
class Predator{
String predatorName;
String latinName;
String weight;
..
//add your getters and setters as well
}
然后使用它:
public static void main(String[] args) throws Exception{
List<Predator> predatorList = new ArrayList();
String fileLocation = System.getProperty("user.dir");
String dataPath = fileLocation + File.separator + "predators.txt";
java.io.File file = new java.io.File(dataPath);
Scanner input = new Scanner(file);
input.useDelimiter(":");
List<Predator> predatorList = new ArrayList();
Predator predator = new Predator();
for (int i = 0; input.hasNext(); i++) {
predator.setPredatorName(input.next());
predator.setLatinName(input.next()));
...
predatorList.add(predator);
}
}
最后检索列表中的不同掠食者很简单:
Predator myPredator = predatorList.get(0); //which returns you the first predator in the list.
System.out.println(myPredator.getWeight()); // this will only print out the weight of the first predator
在上面的示例中,我在循环中重复使用了相同的predator
变量。当然,您可以根据需要在循环的每个迭代中创建一个新的Predator
实例,但这实际上意味着您在每次迭代中都创建一个新对象。