有没有一种方法可以在Java中自动创建变量?

时间:2019-01-11 03:33:56

标签: java

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()将每个单词/数字分配给相应的字符串。现在,当我打印重量时,所有动物的重量都会打印在输出中。我想知道是否可以...例如说在第三行上打印动物的体重?谢谢

1 个答案:

答案 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实例,但这实际上意味着您在每次迭代中都创建一个新对象。